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(.mp4libx264が利用可能な場合のデフォルト)でエンコードし、複数のスレッド(デフォルトではスレッドの数は自動的に選択された) とビットレート オプションによって、異なるバイナリが生成される場合があります。

  1. 以下の点を確認する必要があるかもしれません。コーデックバージョン(ffmpegのバージョンだけでなく)はffmpegと同じですが、同じバージョンでもlibx264の異なるバージョンを使用するように設定できるため、同じファイルのエンコードごとに異なるバイナリが生成される可能性があります。残念ながら簡単な方法はないコーデックのバージョンを確認します。

関連情報