
ソース ファイルが変更されず、同じ FFmpeg バージョンが使用されていると仮定すると、出力ファイルは常に同じになりますか?
たとえば、拡張子が AVI のソース ファイルがあるとします。これを FFmpeg のデフォルト設定を使用して MP4 に変換すると、FFmpeg を実行するたびにビットが同一のファイルが生成されますか?
答え1
限定的な答えは「はい」です。通常の違いは、エンコーダーとマルチプレクサーによって埋め込まれたバージョン文字列によるものです。追加すると、-bitexact
それらが抑制されます。
ただし、x265 などの一部のエンコーダーは、マルチスレッド エンコーディングでは非決定的です。
PPC および Altivec アーキテクチャ上のいくつかの DSP ルーチンや、いくつかのピクセル形式変換ルーチンなど、他のニッチなケースもいくつかあります。-bitexact
ここでも、どのルーチンが選択されるかが影響します。
FFmpegには自動回帰テストスイートがあり、その結果は公開されており、運命.ffmpeg.org。
ほぼすべてのテストは、参照実行のハッシュに対してチェックされます。基本的にはビットの正確さが求められます。
答え2
使用されるコーデックとオプションによって異なります。
- コマンドは
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が利用可能な場合のデフォルト)でエンコードし、複数のスレッド(デフォルトではスレッドの数は自動的に選択された) とビットレート オプションによって、異なるバイナリが生成される場合があります。
- 以下の点を確認する必要があるかもしれません。コーデックバージョン(ffmpegのバージョンだけでなく)はffmpegと同じですが、同じバージョンでもlibx264の異なるバージョンを使用するように設定できるため、同じファイルのエンコードごとに異なるバイナリが生成される可能性があります。残念ながら簡単な方法はないコーデックのバージョンを確認します。