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

标签 ffmpeg frame-rate

这是 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/

相关文章:

video - 是否可以使用 MPEG-DASH 流式传输多帧率视频?

ffmpeg - 使用ffmpeg提取视频帧

Windows Phone 7 中的性能监控(电源和 FPS)

java - 在java中加载图像后FPS下降

java - 与帧速率无关的正弦波模式

video - 在视频中的 Ffmpeg 中重新缩放或动态缩放图像

ffmpeg - Mpegts 大小与 ts 文件总和的差异

video - FFMPEG 将 RGBA 图像序列拆分为 rgb.mp4 和 alpha.mp4

animation - 如何在 ffmpeg 中使用时间线编辑单个图像输入?

c# - 尝试在 C# WPF 程序中确定 FPS