音频转码, 设置音频数据格式-sample_fmt
来源:互联网 发布:格林斯潘 知乎 编辑:程序博客网 时间:2024/05/29 19:25
一、之前的一个音频处理需求, 需要了解音频pcm数据的存放形式和数据类型
对音频的声道进行处理, 比如,
a. 左声道覆盖右声道
b. 右声道覆盖左声道
c. 左右声道混音
功能完成后, 需要生成各种格式音频文件进行测试, 可以使用ffmpeg的 -sample_fmt 设置音频数据格式,进行测试
查看ffmpeg支持的sample_fmt参数
命令:ffmpeg.exe -sample_fmts
结果:
name depth
u8 8
s16 16
s32 32
flt 32
dbl 64
u8p 8
s16p 16
s32p 32
fltp 32
dblp 64
实例1: 生成 AV_SAMPLE_FMT_S16 格式的音频数据, 打包模式packet, signed 16 bits
命令:ffmpeg.exe -i in.mp4 -vn -sample_fmt s16 out_s16.wav
实例2:生成 AV_SAMPLE_FMT_FLTP 格式的音频数据, 打包模式planar, float
命令: ffmpeg.exe -i in.mp4 -vn -sample_fmt fltp out_fltp.mp3
问题, 并不是所有sample format都可以设置, 貌似, 与ffmpeg中集成的音频编码器和输出音频封装格式都有关系
二、 解码出来的音频pcm数据, 按照存放形式和数据类型来分析
空间存放形式有两种, planar和packet
a. planar 形式, 各个声道分开存放, 比如5.1声道的,假设data为指针数组, 则data[0] ~ data[5]分别存放各个声道数据的地址
b. packet形式, 数据打包存放, 同样为5.1声道, data[0]指向打包后的音频数据地址
数据存放形式可以理解为 sample1 sample2 sample3 ...
sample1排列类似这样: channel1::sample1 channel2::sample1 ......... channel6::sample1
channel1::sample1 则是声道1中第一个样点的数据
数据类型有五种,unsigined 8 bits、signed 16 bits、signed 32 bits、float、double;
三、将空间存放形式和数据类型组合起来, 就是ffmpeg中的sample_format
enum AVSampleFormat {
AV_SAMPLE_FMT_NONE = -1,
AV_SAMPLE_FMT_U8, ///< unsigned 8 bits
AV_SAMPLE_FMT_S16, ///< signed 16 bits
AV_SAMPLE_FMT_S32, ///< signed 32 bits
AV_SAMPLE_FMT_FLT, ///< float
AV_SAMPLE_FMT_DBL, ///< double
AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar
AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar
AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar
AV_SAMPLE_FMT_FLTP, ///< float, planar
AV_SAMPLE_FMT_DBLP, ///< double, planar
AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically
};
- 音频转码, 设置音频数据格式-sample_fmt
- PCM音频数据格式介绍
- 音频设置
- 如何转换音频数据格式1
- ffmpeg()音频转码
- 音频
- 音频
- 音频
- 音频
- 音频
- 音频
- 音频
- iOS音频系列(四)--音频的文件格式和数据格式
- 转音频
- 音频缓冲区的设置
- WinCE音频启动设置
- 如何设置音频质量
- 音频-AudioComponentDescription 类型设置
- php 随机取数组中的一个值,或多个值
- destoon网站根目录license.txt不允许修改或删除,请检查
- EventBus使用详解(一)——初步使用EventBus
- poj 3469 Dual Core CPU(最小割)
- CAFFE-QT编译调试
- 音频转码, 设置音频数据格式-sample_fmt
- 菜鸟从零开始初始WebSocket -Server篇(三)
- 遍历Map的四种方法
- ConcurrentHashMap原理详解
- wuzhicms后台菜单的添加
- 图解正向代理、反向代理、透明代理
- pythoneer 的三大神器—Virtualenv入门基础教程
- Maven中pom.xml的解析
- Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析