FFMPEG自学二 ⾳频编码实战
一、FFmpeg编码流程

二、流程关键函数
avcodec_find_encoder:根据指定的AVCodecID查找注册的编码器。
avcodec_alloc_context3:为AVCodecContext分配内存。
avcodec_open2:打开编码器。
avcodec_send_frame:将AVFrame⾮压缩数据给编码器。
avcodec_receive_packet:获取到编码后的AVPacket数据,收到的packet需要⾃⼰释放内存。
av_frame_get_buffer: 为⾳频或视频帧分配新的buffer。在调⽤这个函数之前,必须在AVFame上设
置好以下属性:format(视频为像素格式,⾳频为样本格式)、nb_samples(样本个数,针对⾳频)、
channel_layout(通道类型,针对⾳频)、width/height(宽⾼,针对视频)。
av_frame_make_writable:确保AVFrame是可写的,使⽤av_frame_make_writable()的问题是,在
最坏的情况下,它会在您使⽤encode再次更改整个输⼊frame之前复制它. 如果frame不可写,
av_frame_make_writable()将分配新的缓冲区,并复制这个输⼊input frame数据,避免和编码器需
要缓存该帧时造成冲突。
av_samples_fill_arrays 填充⾳频帧
flush encoder 调⽤⼀次 avcodec_send_frame(NULL)(返回成功),然后不停调⽤
avcodec_receive_packet() 直到其返回 AVERROR_EOF,取出所有缓存帧
avcodec_receive_packet() 返回 AVERROR_EOF 这⼀次是没有有效数据的,仅仅获取到⼀
个结束标志
三、PCM涉及的参数
1. Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。
2. Sample Size : 量化位数。通常该值为16-bit。
3. Number of Channels : 通道个数。常⻅的⾳频有⽴体声(stereo)和单声道(mono)两种类型,⽴体声包 含左声道和右声道。另外还有环绕⽴体声等其它不太常⽤的类型。
4. Sign : 表示样本数据是否是有符号位,⽐如⽤⼀字节表示的样本数据,有符号的话表示范围为-128 ~ 127,⽆符号是0 ~ 255。有符号位16bits数据取值范围为-32768~32767。
5. Byte Ordering : 字节序。字节序是little-endian还是big-endian。通常均为little-endian。字节序说 明⻅第4节。
6. Integer Or Floating Point : 整形或浮点型。⼤多数格式的PCM样本数据使⽤整形表示,⽽在⼀些对 精度要求⾼的应⽤⽅⾯,使⽤浮点类型表示PCM样本数据(浮点数 float值域为 [-1.0, 1.0])。
四、FFmpeg中Packed和Planar的PCM数据区别
packed格式
1 AV_SAMPLE_FMT_U8, ///< unsigned 8 bits
2 AV_SAMPLE_FMT_S16, ///< signed 16 bits
3 AV_SAMPLE_FMT_S32, ///< signed 32 bits
4 AV_SAMPLE_FMT_FLT, ///< float
5 AV_SAMPLE_FMT_DBL, ///< double
只能保存在AVFrame的uint8_t *data[0];
planar格式
1 AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar
2 AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar
3 AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar
4 AV_SAMPLE_FMT_FLTP, ///< float, planar
5 AV_SAMPLE_FMT_DBLP, ///< double, planar
6 AV_SAMPLE_FMT_S64, ///< signed 64 bits
7 AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar
注:
planar为FFmpeg内部存储⾳频使⽤的采样格式,所有的Planar格式后⾯都有字⺟P标识。
Packed: L R L R L R L R 识记:Packed(拥挤的) 左拥右抱
Planar : L L L L ... R R R Planar (平面的) 分层
plane 0对于uint8_t *data[0]
plane 1对于uint8_t *data[1]
FFmpeg默认的AAC编码器不⽀持AV_SAMPLE_FMT_S16格式的编码,只⽀持
AV_SAMPLE_FMT_FLTP
FFmpeg⾳频解码后和编码前的数据是存放在AVFrame结构中的。
Packed格式,frame.data[0]或frame.extended_data[0]包含所有的⾳频数据中。
Planar格式, frame.data[i]或者frame.extended_data[i]表示第i个声道的数据(假设声道0是第⼀
个), AVFrame.data数组⼤⼩固定为8,如果声道数超过8,需要从frame.extended_data获取声道数
据。
五、PCM数据播放
ffplay -f f32le -ac 2 -ar 48000 a.pcm 播放格式为f32le,双声道,采样频率48000Hz的PCM数据
相关文章:

FFMPEG自学二 ⾳频编码实战
一、FFmpeg编码流程二、流程关键函数avcodec_find_encoder:根据指定的AVCodecID查找注册的编码器。 avcodec_alloc_context3:为AVCodecContext分配内存。 avcodec_open2:打开编码器。 avcodec_send_frame:将AVFrame⾮压缩数据给…...

一致魔芋在北交所上市:市值突破11亿元,吴平夫妇为实控人
2月21日,湖北一致魔芋生物科技股份有限公司(下称“一致魔芋”,BJ:839273)在北京证券交易所上市。本次上市,一致魔芋的发行价为11.38元/股,发行1350万股,募资总额约为1.54亿元。 本次发行后&…...

进程或线程终止是否会释放锁
线程锁的必要性比如一个多线程抢票程序,tickets作为临界资源,所有的线程都要对它进行判断ticket是否大于0,以及ticket–的操作。用ticket–操作举例,虽然他看起来是一行C语言的代码,但是实际上它的底层汇编经历了三个阶…...
mysql复制表提示某些为null字段无效
sql_mode‘ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’ explicit_defaults_for_timestamp ON 1、方式1、 首先用下面的命令看下sql_mode show variables like ‘sql_mode’; 如果查询的结果如下&#…...

【数据库】redis 配置文件与发布订阅
目录 配置文件 一,Units 二, INCLUDE 三,NETWORK 1, bind 2, tcp-backlog 3,timeout 4, tcp-keepalive 四,GENERAL 1,daemonize 2, pidfile 3&…...

ChatGPT来了,英语不能丢,但我不想上班
文 / 谷雨(微信公众号:王不留) 好久没写文,可能大伙已把我忘了。春节之后,状态一直不太好。我在2月1号时从老家直接来到了深圳出差,而后以996的工作状态疲于应付工作中的各种问题。 终于这周末休息了两天&a…...
【LeetCode】二叉树的直径 [E](二叉树)
543. 二叉树的直径 - 力扣(LeetCode) 一、题目 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 …...

Mybatis框架详解(全)
目录 MyBatis简介 MyBatis整体架构及运行流程 1.数据源配置文件 2.Sql映射文件 3.会话工厂与会话 4.运行流程 mybatis实现增删改查 Mybatis的获取参数的方式 mapper中自定义映射 mybatis注解开发 mybatis缓存 mybatis分页插件 MyBatis简介 MyBatis 是一款优秀的持久…...

2023年爆火的csgo搬砖项目详细拆解,steam搬砖长期稳定
不懂的同学可以听我下面慢慢道来 我的态度:存在即有意义,没有长久的赚钱项目,但是一定有长久赚钱的人。 我们团队也一直在做这个项目,赚钱是一定的,简单总结:执行力技巧量化。 开门见山 一、steam搬砖项…...

C语言实现动态管理通讯录信息系统(静态通讯录plus版)
文章目录前言:一.动态管理思想1.通讯录结构体声明发生变化2.通讯录结构体初始化发生变化3.通讯录能够动态增容4.通讯录销毁数据二.优化通讯录可持续读写信息1.保存通讯录中的信息到文件中2.加载文件信息到通讯录中三.源码1.text.c2.contact.c3.contact.h前言&#x…...

核心技术: springboot 启动类加载时方法执行的几种实现方式, bean声明周期, 启动执行顺序
目录 1. 业务场景 -> 1.1 初始化操作 -> 1.2 业务操作 -> 1.3优势 2. 实现方式(多种方式,不同思想) -> 2.1 定时调度任务(常用四种方式 task ) --> 2.1.1 Timer(单线程) --> 2.1.2 scheduledExecutorService(多线程并发执行,线程池) --> 2.1…...

拒绝背锅:测试项目中的风险管理一定要知道
测试经理除了要管理产品线的质量保障和日常部门事务工作外,另一项比较重要的就是测试项目全流程的管理。 今天不聊整体的测试项目流程如何开展,而是想聊一聊在同行中比较高频出现的一个字眼:风险管理。 什么是风险管理 引用百度上的解释&a…...
20-js本地存储
js本地存储 localStorage localStorage是window下的对象,可以使用window.localStorage调用,也可以直接使用localStorage调用。 浏览器关闭,localStorage也不会消失 示例: <body><h2>localStorage</h2><…...

ABAP 辨析ON INPUT|REQUEST|CHAIN-INPUT|CHAIN-REQUEST
1、逻辑流 在屏幕开发中,存在如下逻辑流: PBO(Process Before Output):屏幕输出之前触发 PAI(Process After Input):用户在屏幕中执行操作触发 POH(Process On Help-…...
LeetCode:逆波兰式;
150. 逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 、-、* 和 / 。每个操作数(运算对象)都可以是一个整…...

为什么阳康后,感觉自己变傻了?
不少人在阳康后出现脑力下降的情况,好像脑子里被雾笼罩。脑雾并不是新名词,已经存在了十几年。以前慢性疲劳综合征患者和脑震荡患者会用它来形容自己的症状。脑雾其实是认知障碍,它可由多种原因引起。比如过度劳累、长期酗酒、缺乏睡眠、久坐…...

考公和大厂40万年薪的offer,选哪个?
眼看毕业将至,相信很多小伙伴已经摩拳擦掌,在为毕业季就业做准备了。2023年高校毕业生规模预计1158万人,同比增加82万人。在资深人力资源服务家汪张明看来,2023年的就业态势不仅是大学毕业生数量有增加,还存在一定的存…...
多线程环境下调用 HttpWebRequest 并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作系统上默认为10. 如果不修改这个并发连接限制,那么客户端同时可以建立的 http 连接数就只有…...

vue3-element-admin搭建
vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 Element Plus 版本的后台管理前端解决方案,是 有来技术团队 继 youlai-mall 全栈开源商城项目的又一开源力作功能清单技术栈清单技术栈 描述官网Vue3 渐进式 JavaScript 框架 https://v3.cn.vuejs.org/Ty…...

蓝海创意云vLive虚拟直播亮相2023昆山元宇宙产品展览会
2月15日-19日,由中国计算机行业协会“元宇宙创见未来”2023元宇宙产品展览会在江苏昆山隆重召开,共吸引了省内外32家企业参展,展出近百款元宇宙产品或技术,涵盖芯片、显示、VR、AR等硬件设备,以及工业、文旅、娱乐、教…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...