
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 -bitexact
werden 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. -bitexact
Auch 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.
- Befehl
ffmpeg -i big_buck_bunny_480p_stereo.avi out.mp4
erzeugt 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, .mp4
wenn libx264 verfügbar ist), mehrere Threads (standardmäßig ist die Anzahl der Threadsautomatisch ausgewählt) und Bitrate-Optionen können unterschiedliche Binärdateien erzeugen.
- 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.