ffmpeg认为音频帧和音频样本之间的区别是什么?

问题描述 投票:1回答:2

在ffmpeg的手册页中列出了一个奇怪的选项:

-aframes number (output)
    Set the number of audio frames to output. This is an obsolete alias for "-frames:a", which you should use instead.

什么是“音频框架”在我看来是可疑的。 This SO answer表示帧与样本同义,但这不是ffmpeg认为帧是什么。当我将一些音频重新采样到22.05 kHz且长度恰好为313帧时,请看一下此示例:

$ ffmpeg -i input.mp3 -frames:a 313 -ar:a 22.05K output.wav

如果'frame'和'sample'是同义词,我们期望音频持续时间为0.014秒,但实际持续时间为8秒。 ffmpeg认为我输入的帧率为39.125。

这里发生了什么? ffmpeg认为音频帧实际上是什么?如何找到输入音频的帧频?

ffmpeg frame-rate
2个回答
2
投票

“帧”在这里有点重载。

在PCM中,一帧是一组同时发生的样本。如果您的音频为22.05 kHz,并且具有313个PCM帧,则时间长度大约为14毫秒,如您所愿。

但是,您的音频不是PCM,而是MP3。 MP3帧的长度约为26毫秒。其中313个加起来大约需要8秒。这里的帧是不能独立解码的音频块。 (实际上,某些帧实际上通过位存储库依赖于其他帧!)


1
投票

FFmpeg在内部使用AVFrame结构来以块形式传输和处理所有媒体数据。每帧的样本数取决于解码器。对于视频,一帧由一个图片的所有像素数据组成,这是一个逻辑分组,尽管它也可以包含隔行视频流的两个半图片的像素数据。

对于音频,基于DCT的编解码器通常使用DCT窗口中使用的样本数量填充帧-如Brad所述,取决于采样率,AAC为1024,MP3为576/1152。 PCM样本是独立的,因此没有固有的构架概念,因此也没有帧大小。但是,样本仍需要容纳在AVFrame中,对于每个缓冲区中的平面PCM,ffmpeg默认为每帧1024个样本(每个通道一个)。

您可以使用ashowinfo过滤器显示帧大小。您也可以使用asetnsamples过滤器以自定义帧大小重新分组数据。

© www.soinside.com 2019 - 2024. All rights reserved.