我试图弄清楚在解码音频后FFmpeg如何在AVFrame
中保存数据。
基本上,如果我在AVFrame->data[]
数组中打印数据,我会得到许多无符号8位整数,这是原始格式的音频。
根据我对FFmpeg doxygen的理解,数据格式以enum AVSampleFormat
表示,主要有两类:交错和平面。在交错类型中,数据全部保存在AVFrame->data
数组的第一行,大小为AVFrame->linesize[0]
,而在平面类型中,音频文件的每个通道都保存在{{{1}的单独行中。 1}}数组和数组的大小为AVFrame->data
。
是否有指南/教程解释数组中的数字对每种格式的含义是什么?
答案 0 :(得分:2)
每个data
数组(平面)中的值是根据指定格式的实际音频样本。例如。如果格式为AV_SAMPLE_FMT_S16P
,则表示data
数组实际上是int16_t
PCM数据的数组。如果我们处理单声道信号 - 只有data[0]
有效,如果它是立体声 - data[0]
且data[1]
有效,等等。
我不确定是否有任何指南可以帮助您解释每个特定情况,但无论如何所描述的方法都非常简单且易于理解。你应该稍微玩一下,事情应该变得清晰。