FFmpeg AVFrame音频数据修改

7
我正在尝试弄清楚FFmpeg在音频解码后如何保存数据到AVFrame中。
基本上,如果我打印AVFrame->data[]数组中的数据,则会得到一系列无符号8位整数,即原始格式的音频数据。
从我所理解的FFmpeg文档中,数据的格式用enum AVSampleFormat表示,有两种主要类型:交错和平面。在交错类型中,所有数据都存储在AVFrame->data数组的第一行中,其大小为AVFrame->linesize[0],而在平面类型中,音频文件的每个通道都存储在AVFrame->data数组的单独一行中,数组的大小为AVFrame->linesize[0]
是否有一个指南/教程来解释每种格式中数组中的数字代表什么?
1个回答

3
每个data数组(平面)中的值都是根据指定格式的实际音频样本。例如,如果格式为AV_SAMPLE_FMT_S16P,则意味着data数组实际上是int16_t PCM数据的数组。如果我们处理单声道信号,则只有data[0]是有效的;如果是立体声,则data[0]data[1]都是有效的,以此类推。
我不确定是否有任何指南可以帮助您解释每个特定情况,但无论如何,所述方法相当简单,并且易于理解。您只需稍微尝试一下,事情就会变得清晰明了。

如果在AVFrame.h中声明的数组为uint8_t,那么AVFrame->data如何包含int16_t - Arlind
1
只需使用强制类型转换:int16_t *pcm16 = (int16_t*) frame->data[0] - Sergio
AVFrame->data 数组中的每个元素是否都代表一个音频样本? - Arlind
这是否意味着每个样本由“data [0]”数组的2个元素表示? - Arlind
不,它不是。正如我所说 - 样本的实际类型由“格式”字段确定,它可以是8位、16位或32位。 - Sergio
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接