Как сравнить/показать разницу между 2 видео в ffmpeg?
Я новичок в кодировании. Я прочитал и попробовал x264 в режиме без потерь (- qp 0), однако я хотел бы убедиться, что в моем новом видео каждый пиксель содержит ту же информацию, что и исходный файл (который находится в YUV 420, поэтому потери преобразования цвета можно избежать, насколько я знаю). Я хочу иметь возможность проверить это, потому что я не верю в это, если кто-то просто говорит, что это без потерь.
Я приветствую ответы, предлагающие другие кодеки для кодирования без потерь, мой единственный требования к кодекам имеют одну из лучших скоростей сжатия и позволяют мне выбирать различные времена расчета (например, диапазон от плацебо до veryfast в x264), чтобы настроить уровень сжатия и время calc для моих потребностей. Но имейте в виду, что первоначальный вопрос заключается в том, как я могу вычислить различия кадр за кадром из двух видео и экспортировать его в 3-й файл, чтобы я мог смотреть его сам. Я думаю, что знание (если оно возможно и не имеет серьезных ограничений) будет мне это тоже пригодится в будущем.
1 ответов
сравнение декодированных данных с хэшем MD5
можно использовать ffmpeg MD5 muxer чтобы показать, что декодирование приводит к тому же выходу:
-
получить MD5 хэш видеопотока из исходного ввода:
$ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 - MD5=5ee3ae1ee5feaf30618938290225f682
-
преобразовать в выход без потерь:
$ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv
-
сравнить MD5 хэш без потерь видео:
$ ffmpeg -loglevel error -i lossless.mkv -map 0:v -f md5 - MD5=5ee3ae1ee5feaf30618938290225f682
Примечания:
вы не можете получить тот же хэш даже с кодировщиком без потерь. могут произойти изменения различных атрибутов, которые могут изменить хэш MD5, такой как цветовое пространство или цветовая подвыборка.
вы можете видеть, что хэш MD5 может измениться, если вы выводите в формат с потерями.
другие без потерь сжатые видеокодеры, поддерживаемые FFmpeg включают в себя: ffv1, ffvhuff, huffyuv и utvideo.
посмотреть framemd5 muxer для просмотра хэша для каждого кадра.
визуальное сравнение
с фильтром смесь
просмотр разницы выхода с потерями.
можно использовать фильтр бленда визуально сравнить разницу.
используя ffplay
ffplay -f lavfi \
"movie=original.mkv[org]; \
movie=encoded.mkv[enc]; \
[org][enc]blend=all_mode=difference"
blend медленно, и эта команда не может играть в режиме реального времени в зависимости от вашего процессора и входов. В качестве альтернативы вы можете вывести видео с помощью
ffmpeg
затем смотреть его, как показано ниже.есть режимы, отличные от
difference
что может соответствовать вашим потребностям. Вижу документация.
используя ffmpeg
ffmpeg -i original.mkv -i encoded.mkv \
-filter_complex "blend=all_mode=difference" \
-c:v libx264 -crf 18 -c:a copy output.mkv
- возможно, вам придется добавить
,format=yuv420p
в конец вашей filterchain (сразу послеdifference
) для просмотра записей в не простых игроков.
с наложенным фильтром
посмотреть показать разницу видео с фильтром наложения ffmpeg в.