下面是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说frame是sample的同义词,但这不是ffmpeg认为的frame。当我将一些音频重新采样为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认为音频帧到底是什么?如何找到输入音频的帧率?
发布于 2020-02-11 02:21:42
"frame“在这里是一个有点过载的术语。
在PCM中,帧是同时发生的一组样本。如果你的音频是22.05 kHz,你有313PCM帧,它的时间长度大约是14毫秒,正如你所预期的那样。
但是,你的音频不是PCM...我是MP3。MP3帧大约有26毫秒长。其中313个加起来大约是8秒。这里的帧是不能独立解码的音频块。(实际上,一些帧实际上通过比特库依赖于其他帧!)
发布于 2020-02-11 18:56:08
FFmpeg在内部使用AVFrame结构来传输和处理块中的所有媒体数据。每帧的采样数取决于解码器。对于视频,一帧由一个画面的所有像素数据组成,这是一个逻辑分组,尽管它也可以包含隔行扫描视频流的两个半画面的像素数据。
对于音频,基于离散余弦变换的编解码器通常用离散余弦变换窗口中使用的采样数填充一帧--正如布拉德提到的,根据采样率的不同,对于AAC是1024,对于MP3是576/1152。PCM样本是独立的,因此没有成帧的固有概念,因此也就没有帧大小。然而,样本仍然需要容纳在AVFrames内,并且对于每个缓冲器中的平面PCM,FMPEG默认为每帧1024个样本(每个通道一个)。
您可以使用ashowinfo过滤器来显示帧大小。还可以使用asetnsamples筛选器以自定义帧大小对数据进行重新分组。
https://stackoverflow.com/questions/60156075
复制相似问题