如何计算ffmpeg输出文件的大小?

pou*_*def 5 ffmpeg filesize

我正在使用ffmpeg将家庭视频转换为DVD格式,并希望在进行转换之前计算输出文件大小.

我的输入文件的比特率为7700 kbps,长度为114秒.音频比特率是256 kbit(每秒?)输入文件是77MB.为了获得这些信息,我跑了:

mplayer -vo null -ao null -frames 0 -identify input.MOD

所以理论上,输入文件应该(大致)文件大小为:

((7700/8)*114)/ 1024

也就是说,(7700/8)是千字节/秒,乘以114秒,然后转换为兆字节.这给了我107MB,超出了我的77.因此我对他的公式持怀疑态度.

也就是说,转换视频后:

ffmpeg -i input.MOD -y -target ntsc-dvd -sameq -aspect 4:3 output.mpg
Run Code Online (Sandbox Code Playgroud)

这些数字似乎更有意义.比特率是9000 kbps,应用上面的公式,我得到125MB,我的实际输出文件大小是126MB.

那么,有两个问题:

  1. 如何将音频比特率计入此计算?它是附加的(视频文件大小+音频文件大小)?

  2. DVD总是有9000千比特/秒的速率吗?这是DVD的定义吗?或者可能会根据我输入视频的视频质量而改变?什么"-target ntsc-dvd"保证我的视频?

  3. 为什么我的输入文件与计算"不匹配",但输出文件呢?还有其他一些我不考虑的变量吗?

计算文件大小的正确方法是什么?

qdo*_*dot 3

您必须记住的是,需要考虑几种不同的比特率测量:

  • 最大比特率 - 视频中动作最密集的片段的比特率
  • 平均(目标)比特率 - 使用您的公式精确计算的比特率

  • 速率控制(编码器对视频复杂性变化的反应速度)

有损视频编码的工作原理是消除人眼难以看到的特征。这意味着慢动作、说话的头像可以比旋转的全屏缩放/全景进一步压缩。

为什么这有关系?标准确实指定了“最大”比特率是有原因的 - 这是播放器读取和解码符合标准的视频所需的速度。DVD 的速度约为 9000kbps。

最后,由于它是一种有损压缩,因此可以指定平均比特率。如果您需要将内容容纳在有限的空间或带宽中(可能允许缓冲更密集的片段),则可以使用此方法。

例如,您可以拥有最大比特率为 7000kbps、平均比特率为 5500kbps 的视频。最后,速率控制是用于决定编码器应分配给不同片段多少“空间”的算法。如果您进行多通道编码,您将重用之前通道中的信息 - 提高质量和比特率分布。