Как сравнить 2 изображения с помощью FFmpeg?

Вопрос или проблема

Я наткнулся на этот вопрос, но вижу, что он только для видео. Кто-нибудь знает, если эта команда из вышеупомянутого поста:

ffmpeg -r VIDEOFPS -i VIDEO -r VIDEOFPS -i VIDEO -lavfi blend=all_mode=grainextract -c:v libx264 -crf 0 -an ./out.mp4

Может ли она быть использована для изображений? Чтобы извлечь разницу между 2 изображениями в выходное изображение?

Я пытаюсь сравнить два PNG/JPG изображения, используя команды FFmpeg в терминале Mac из расположения ffmpeg-image-diff, но получаю много ошибок.

Я пробовал вариант 1:

ffmpeg -i image1.jpg -I image2.jpg -filter_complex "[0:v]format=yuv420p[main];[1:v]format=yuv420p[ref]; [main][ref]psnr=stats_file=psnrs.txt:shortest=1" -f null -

Вариант 2:

ffmpeg -i image1.png -i image2.png -filter_complex [1:v]negate[inv],[0:v][inv]mix=inputs=2 outdiff.png

Вариант 3:

ffmpeg -i image1.jpg -i image2.jpg  -report -filter_complex "[0:v]format=yuv420p[main];[1:v]format=yuv420p[ref]; [main][ref]psnr=stats_file=psnrs.txt:shortest=1" -f null - 

Но я каждый раз получаю:

Error opening input file image1.jpg.
Error opening input files: No such file or directory

Ответ или решение

Для сравнения двух изображений с помощью FFmpeg, давайте подробно рассмотрим, какие шаги необходимо предпринять, использую подходы из приведенных примеров и решения для возникающих ошибок.

Теория

FFmpeg — это мощный инструмент для обработки мультимедийных данных, который поддерживает различное количество фильтров для видео и изображений. Один из способов сравнить два изображения — это использование фильтров, таких как blend или psnr, которые могут показать различия между изображениями напрямую или через вычисление определенных метрик, например, Peak Signal-to-Noise Ratio (PSNR).

Примеры

Пример 1: Blend Filter

Команда с использованием фильтра blend=all_mode=grainextract позволяет создавать изображение, отображающее различия между двумя входными изображениями. Каждый пиксель результирующего изображения будет представлять разницу между соответствующими пикселями входных изображений.

ffmpeg -i image1.jpg -i image2.jpg -filter_complex "blend=all_mode=grainextract" output.png

Пример 2: PSNR

Фильтр psnr может быть использован для вычисления метрик качества между двумя изображениями. Это полезно для анализа уровня различий в числовом выражении.

ffmpeg -i image1.jpg -i image2.jpg -filter_complex "psnr" -f null -

Применение

  1. Проверка доступности файлов: Ошибка "Error opening input file" обычно связана с неправильным указанием пути к файлу или отсутствием файла в указанной директории. Убедитесь, что полный путь к каждому изображению указан правильно и что изображения действительно существуют в указанной локации.

  2. Формат файлов: Важно убедиться, что формат входных изображений поддерживается FFmpeg и они не повреждены. Поддерживаемые форматы включают, но не ограничиваются JPG и PNG.

  3. Синтаксис команд: При написании команд обратите внимание на правильное использование опций и синтаксиса. Правильное написание команд критично для корректной работы FFmpeg.

  4. Логи и сообщения об ошибках: Используйте ключ -report для генерации подробных логов, где будут указаны все шаги обработки и возможные проблемы с файлами.

Пример исправленной команды на основе ваших попыток может выглядеть так:

ffmpeg -i /path/to/image1.jpg -i /path/to/image2.jpg -filter_complex "blend=all_mode=grainextract" /path/to/output_diff.png

В данном случае, корректно указав путь к файлам и выбрав соответствующий фильтр, можно получить изображение, представляющее отличия между двумя первоначальными изображениями. Если необходимо простое численное выражение различия, используйте команду с PSNR-фильтром, думая о выводе в терминал.

Оцените материал
Добавить комментарий

Капча загружается...