FFmpeg 每次都會產生相同的二進位輸出檔嗎?

FFmpeg 每次都會產生相同的二進位輸出檔嗎?

假設原始檔案沒有更改並且使用相同的 FFmpeg 版本,輸出檔案是否始終相同?

假設我有一個擴展名為 AVI 的原始檔。如果我使用預設 FFmpeg 設定將其轉換為 MP4,每個 FFmpeg 運行是否會產生完全相同的檔案?

答案1

合格的答案是肯定的。通常的差異是由於編碼器和復用器嵌入的版本字串造成的。添加-bitexact會抑制這些。

然而,像x265這樣的一些編碼器在多線程編碼中是不確定的。

還有一些其他的小眾案例,例如 PPC 和 Altivec 架構上的一些 DSP 例程,以及一些像素格式轉換例程。-bitexact這裡也有影響,即選擇例程。

FFmpeg 有一個自動回歸測試套件,其公開結果可以在以下位置查看命運.ffmpeg.org

幾乎所有測試都會根據參考運行的雜湊值進行檢查。這基本上需要位精確性。

答案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 相同,可以配置為使用不同版本的 libx264,這可能會導致相同檔案的編碼不同的二進位檔案。很遺憾沒有簡單的方法檢查編解碼器版本。

相關內容