Вопрос или проблема
Я наткнулся на этот вопрос, но вижу, что он только для видео. Кто-нибудь знает, если эта команда из вышеупомянутого поста:
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 -
Применение
-
Проверка доступности файлов: Ошибка "Error opening input file" обычно связана с неправильным указанием пути к файлу или отсутствием файла в указанной директории. Убедитесь, что полный путь к каждому изображению указан правильно и что изображения действительно существуют в указанной локации.
-
Формат файлов: Важно убедиться, что формат входных изображений поддерживается FFmpeg и они не повреждены. Поддерживаемые форматы включают, но не ограничиваются JPG и PNG.
-
Синтаксис команд: При написании команд обратите внимание на правильное использование опций и синтаксиса. Правильное написание команд критично для корректной работы FFmpeg.
-
Логи и сообщения об ошибках: Используйте ключ
-report
для генерации подробных логов, где будут указаны все шаги обработки и возможные проблемы с файлами.
Пример исправленной команды на основе ваших попыток может выглядеть так:
ffmpeg -i /path/to/image1.jpg -i /path/to/image2.jpg -filter_complex "blend=all_mode=grainextract" /path/to/output_diff.png
В данном случае, корректно указав путь к файлам и выбрав соответствующий фильтр, можно получить изображение, представляющее отличия между двумя первоначальными изображениями. Если необходимо простое численное выражение различия, используйте команду с PSNR-фильтром, думая о выводе в терминал.