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

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

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

Ответы

Ответ 1

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

Вы можете использовать FFmpeg MD5-мультиплексор, чтобы показать, что результаты декодирования имеют точный результат:

  • Получить хеш 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, чтобы просмотреть хэш для каждого кадра.


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

С фильтром смешивания

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

Вы можете использовать blend filter, чтобы визуально сравнить разницу.

Использование 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.

С фильтром наложения

См. Отображение разницы видео с фильтром наложения ffmpegs.