Erzeugt FFmpeg jedes Mal die gleiche binäre Ausgabedatei?

Erzeugt FFmpeg jedes Mal die gleiche binäre Ausgabedatei?

Vorausgesetzt, die Quelldatei hat sich nicht geändert und es wird dieselbe FFmpeg-Version verwendet, wird die Ausgabedatei immer dieselbe sein?

Angenommen, ich habe eine Quelldatei mit der Erweiterung AVI. Wenn ich sie mit den Standardeinstellungen von FFmpeg in MP4 konvertiere, werden dann bei jedem FFmpeg-Lauf bitidentische Dateien erstellt?

Antwort1

Die qualifizierte Antwort lautet ja. Die üblichen Unterschiede sind auf die von Encodern und Multiplexern eingebetteten Versionszeichenfolgen zurückzuführen. Durch das Hinzufügen -bitexactwerden diese unterdrückt.

Einige Encoder wie x265 sind jedoch bei der Multithread-Codierung nicht deterministisch.

Es gibt noch einige andere Nischenfälle, wie etwa einige DSP-Routinen auf PPC- und Altivec-Architekturen und einige Routinen zur Pixelformatkonvertierung. -bitexactAuch hier hat es Auswirkungen, welche Routinen ausgewählt werden.

FFmpeg verfügt über eine automatisierte Regressionstestsuite, deren öffentliche Ergebnisse eingesehen werden können unterfate.ffmpeg.org.

Fast alle Tests werden mit den Hashes von Referenzläufen verglichen. Das erfordert grundsätzlich Bit-Genauigkeit.

Antwort2

Dies hängt von den verwendeten Codecs und Optionen ab.

  1. Befehl ffmpeg -i big_buck_bunny_480p_stereo.avi out.mp4erzeugt die gleichen Binärdateien. Aber wenn Sie Bitrate-Optionen hinzufügen
ffmpeg -i big_buck_bunny_480p_stereo.avi -maxrate 500k -bufsize 500k out.mp4

Auch mit können Sie möglicherweise andere Ergebnisse erhalten -bitexact.

Also Kodierung mit x264 (was Standard ist, .mp4wenn libx264 verfügbar ist), mehrere Threads (standardmäßig ist die Anzahl der Threadsautomatisch ausgewählt) und Bitrate-Optionen können unterschiedliche Binärdateien erzeugen.

  1. Möglicherweise müssen Sie sicherstellen, dass dieCodecVersionen (nicht nur ffmpeg-Version) sind dieselben wie ffmpeg mit derselben Version, die so konfiguriert werden könnte, dass sie unterschiedliche Versionen von libx264 verwenden, was zu unterschiedlichen Binärdateien bei den Kodierungen derselben Datei führen kann. LeiderEs gibt keinen einfachen Wegum die Codec-Versionen zu überprüfen.

verwandte Informationen