
Если исходный файл не изменился и используется та же версия FFmpeg, будет ли выходной файл всегда одинаковым?
Допустим, у меня есть исходный файл с расширением AVI. Если я преобразую его в MP4 с использованием настроек FFmpeg по умолчанию, будет ли каждый запуск FFmpeg создавать побитно идентичные файлы?
решение1
Квалифицированный ответ — да. Обычные различия связаны со строками версий, встроенными кодерами и мультиплексорами. Добавление -bitexact
подавит их.
Однако некоторые кодировщики, такие как x265, недетерминированы при многопоточном кодировании.
Есть еще несколько узкоспециализированных случаев, например, некоторые процедуры DSP на архитектурах PPC и Altivec, а также несколько процедур преобразования формата пикселей. -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, что может привести к разным двоичным файлам в разных кодировках одного и того же файла. К сожалениюнет легкого путидля проверки версий кодеков.