Как сравнить/показать разницу между 2 видео в ffmpeg?

Я новичок в кодировании. Я прочитал и попробовал x264 в режиме без потерь (- qp 0), однако я хотел бы убедиться, что в моем новом видео каждый пиксель содержит ту же информацию, что и исходный файл (который находится в YUV 420, поэтому потери преобразования цвета можно избежать, насколько я знаю). Я хочу иметь возможность проверить это, потому что я не верю в это, если кто-то просто говорит, что это без потерь.

Я приветствую ответы, предлагающие другие кодеки для кодирования без потерь, мой единственный требования к кодекам имеют одну из лучших скоростей сжатия и позволяют мне выбирать различные времена расчета (например, диапазон от плацебо до veryfast в x264), чтобы настроить уровень сжатия и время calc для моих потребностей. Но имейте в виду, что первоначальный вопрос заключается в том, как я могу вычислить различия кадр за кадром из двух видео и экспортировать его в 3-й файл, чтобы я мог смотреть его сам. Я думаю, что знание (если оно возможно и не имеет серьезных ограничений) будет мне это тоже пригодится в будущем.

1 ответов


сравнение декодированных данных с хэшем MD5

можно использовать ffmpeg MD5 muxer чтобы показать, что декодирование приводит к тому же выходу:

  1. получить MD5 хэш видеопотока из исходного ввода:

    $ ffmpeg -loglevel error -i original.vid -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    
  2. преобразовать в выход без потерь:

    $ ffmpeg -i original.vid -c:v libx264 -qp 0 lossless.mkv
    
  3. сравнить MD5 хэш без потерь видео:

    $ ffmpeg -loglevel error -i lossless.mkv -map 0:v -f md5 -
      MD5=5ee3ae1ee5feaf30618938290225f682
    

Примечания:

  • вы не можете получить тот же хэш даже с кодировщиком без потерь. могут произойти изменения различных атрибутов, которые могут изменить хэш MD5, такой как цветовое пространство или цветовая подвыборка.

  • вы можете видеть, что хэш MD5 может измениться, если вы выводите в формат с потерями.

  • другие без потерь сжатые видеокодеры, поддерживаемые FFmpeg включают в себя: ffv1, ffvhuff, huffyuv и utvideo.

  • посмотреть framemd5 muxer для просмотра хэша для каждого кадра.


визуальное сравнение

с фильтром смесь

Viewing the difference of a lossy outputпросмотр разницы выхода с потерями.

можно использовать фильтр бленда визуально сравнить разницу.

используя 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 в.