Оптимизация пакетного ключения на хромакее с помощью FFmpeg

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

Оптимизация пакетного ключирования по зеленому экрану с помощью FFmpeg

Привет всем!
Я написал скрипт, который обрабатывает MP4 видео с переменным кодом цвета зеленого экрана, заменяя фон на видео. В целом он работает неплохо, но я еще не совсем удовлетворен результатами.

Проблемы, с которыми я сталкиваюсь:

Небольшой зеленый ореол все еще присутствует вокруг объекта.
Размытые края, особенно между руками. Это результат использования boxblur, который мне нужно было отрегулировать, чтобы избавиться от избыточной зеленой окраски.

Вот команда FFmpeg, которую я использую:

ffmpeg -y -i "%background%" -i "%input_file%" -filter_complex "[1:v]chromakey=%color_code%:similarity=0.28:blend=0.01[ckout];[ckout]split[ck1][ck2];[ck1]alphaextract[alph];[alph]boxblur=2:1[alph_processed];[ck2][alph_processed]alphamerge[ck_blurred];[0:v][ck_blurred]overlay[out]" -map "[out]" -map 1:a -c:v !video_codec! !video_encoding_options! -c:a !audio_codec! "!output_file!"

Я немного поэкспериментировал, чтобы найти «подходящие» настройки для Similarity, blend и boxblur.

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

Изображения для справки:
с фоном
[С зеленым экраном2

Видео для загрузки для справки:
https://drive.google.com/drive/folders/1-9uHErLAo2aniv0N7uvMDreweuoz-RSQ?usp=sharing

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

Оптимизация пакетной замены фона с помощью хромакея в FFmpeg

Здравствуйте!

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

Проблемы, с которыми вы столкнулись

  1. Слегка зеленый ореол вокруг объекта — это распространенная проблема при работе с хромакеем, особенно если фон не является однородным или слабо освещен.
  2. Размытость краев — чаще всего возникает из-за применения фильтра boxblur, который может слишком сильно размазывать контуры.

Оптимизация скрипта

Ваш текущий код выглядит следующим образом:

ffmpeg -y -i "%background%" -i "%input_file%" -filter_complex "[1:v]chromakey=%color_code%:similarity=0.28:blend=0.01[ckout];[ckout]split[ck1][ck2];[ck1]alphaextract[alph];[alph]boxblur=2:1[alph_processed];[ck2][alph_processed]alphamerge[ck_blurred];[0:v][ck_blurred]overlay[out]" -map "[out]" -map 1:a -c:v !video_codec! !video_encoding_options! -c:a !audio_codec! "!output_file!"

Предложения по оптимизации:

  1. Использование format и colorchannelmixer для улучшения обработки цвета
    Вместо коррекции цветов с помощью boxblur, попробуйте использовать фильтры colorchannelmixer и curves. Это позволит более точно управлять цветами и минимизировать зеленую окраску.

    [1:v]chromakey=%color_code%:similarity=0.28:blend=0.01[ckout];[ckout]split[ck1][ck2];[ck1]alphaextract[alph];[alph]curves=blue='0.0/0.0 0.5/0.7 1.0/1.0'[alph_processed];[ck2][alph_processed]alphamerge[ck_blurred]
  2. Настройка параметров фильтра boxblur или использование gblur
    Попробуйте другие варианты размытия, такие как gblur, который более эффективно обрабатывает края изображения и может привести к более четким контурам.

    [alph]gblur=sigma=1.0[alph_processed]
  3. Коррекция значений similarity и blend
    Поэкспериментируйте с этими параметрами. Уменьшение similarity может помочь убрать зеленый ореол, но в то же время может снова вернуть нежелательные артефакты.

  4. Добавление эффекта edgedetect для повышения четкости
    Для увеличения четкости можно применить фильтр edgedetect, который поможет выделить края.

    [ck_blurred]edgedetect[edges];[ck_blurred][edges]overlay=shortest=1

Итоговый код

Ниже приведен код с применением вышеуказанных улучшений и оптимизаций:

ffmpeg -y -i "%background%" -i "%input_file%" -filter_complex "
    [1:v]chromakey=%color_code%:similarity=0.28:blend=0.01[ckout];
    [ckout]split[ck1][ck2];
    [ck1]alphaextract[alph];
    [alph]curves=blue='0.0/0.0 0.5/0.7 1.0/1.0'[alph_processed];
    [ck2][alph_processed]alphamerge[ck_blurred];
    [0:v][ck_blurred]overlay[out]" 
-map "[out]" -map 1:a -c:v !video_codec! !video_encoding_options! -c:a !audio_codec! "!output_file!"

Заключение

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

Если у вас есть еще вопросы или вам нужно другое направление, не стесняйтесь задавать их.

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

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