这是 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
如果“帧”和“样本”是同义词,我们预计音频持续时间为 0.014 秒,但实际持续时间为 8 秒。 ffmpeg 认为我输入的帧速率是 39.125。
这是怎么回事? ffmpeg 认为音频帧到底是什么?我如何找到输入音频的这个帧速率?
最佳答案
FFmpeg 在内部使用 AVFrame 结构来传送和处理 block 中的所有媒体数据。每帧的样本数取决于解码器。对于视频,一帧由一张图片的所有像素数据组成,这是一个逻辑分组,尽管它也可以包含隔行扫描视频流的两个半图片的像素数据。
对于音频,基于 DCT 的编解码器的解码器通常使用 DCT 窗口中使用的样本数填充帧 - 正如 Brad 提到的那样,AAC 为 1024,MP3 为 576/1152,具体取决于采样率。 PCM 样本是独立的,因此没有内在的成帧概念和帧大小。然而,样本仍然需要容纳在 AVFrame 中,对于每个缓冲区中的平面 PCM,ffmpeg 默认为每帧 1024 个样本(每个 channel 一个)。
您可以使用 ashowinfo 过滤器来显示帧大小。您还可以使用 asetnsamples 过滤器以自定义帧大小重新组合数据。
关于ffmpeg - ffmpeg 认为音频帧和音频样本之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60156075/