FFmpeg 每次都会产生相同的二进制输出文件吗?

FFmpeg 每次都会产生相同的二进制输出文件吗?

假设源文件没有改变并且使用相同的 FFmpeg 版本,输出文件是否总是相同?

假设我有一个扩展名为 AVI 的源文件。如果我使用默认的 FFmpeg 设置将其转换为 MP4,每次运行 FFmpeg 都会生成位相同的文件吗?

答案1

合格的答案是肯定的。通常的差异是由于编码器和复用器嵌入的版本字符串造成的。添加-bitexact将抑制这些。

然而,一些编码器(如 x265)在多线程编码中是不确定的。

还有一些其他的小众情况,比如 PPC 和 Altivec 架构上的一些 DSP 例程,以及一些像素格式转换例程。-bitexact在这里也有影响,其中选择了例程。

FFmpeg 有一个自动回归测试套件,其公开结果可以在以下网址查看:命运网

几乎所有测试都对照参考运行的哈希值进行检查。这基本上要求位精确性。

答案2

这取决于所使用的编解码器和选项。

  1. 命令ffmpeg -i big_buck_bunny_480p_stereo.avi out.mp4生成相同的二进制文件。但如果你添加比特率选项
ffmpeg -i big_buck_bunny_480p_stereo.avi -maxrate 500k -bufsize 500k out.mp4

即使如此,您仍可能会得到不同的结果-bitexact

因此使用 x264 进行编码(.mp4如果 libx264 可用,则默认使用),多个线程(默认情况下线程数为自动选择) 和比特率选项可能会产生不同的二进制文件。

  1. 您可能需要确保编解码器版本(不仅仅是 ffmpeg 版本)与 ffmpeg 相同,相同版本的 ffmpeg 可以配置为使用不同版本的 libx264,这会导致同一文件的不同编码产生不同的二进制文件。不幸的是没有简单的方法检查编解码器版本。

相关内容