FFMPEG: хроматический ключ / фильтр зеленого экрана для изображений / видео

Мне нужно, чтобы видео использовало фильтр хроматического ключа / фильтр зеленого экрана и накладывало его на другое видео и выводило его как новое видео.

Существуют ли какие-либо библиотеки, скрипты, фильтры или решения для этой цели?

6 ответов

Решение

Я понимаю, что это старый вопрос, но он все еще поднимается вверх, когда я ищу кеинга ffmpeg.

Ответ (сейчас) - да, есть фильтр для генерации хроматических ключей и их наложения. Название фильтра - " цветовой ключ". На сайте есть примеры, вот команда:

ffmpeg -i <base-video> -i <overlay-video> -filter_complex '[1:v]colorkey=0x<color>:<similarity>:<blend>[ckout];[0:v][ckout]overlay[out]' -map '[out]' <output-file>

где <color> цвет rgb для совпадения в шестнадцатеричном формате (например, 0x000000 для черного), <similarity> допуск на цветовое соответствие (например, 0,3), и <blend> (пример: 0,2) контролирует, включена ли непрозрачность или насколько она постепенная. (Смотрите документацию для более).

Минимальный запускаемый пример с тестовыми данными

Ответ на /questions/11847568/ffmpeg-hromaticheskij-klyuch-filtr-zelenogo-ekrana-dlya-izobrazhenij-video/11847591#11847591 был правильным, вот лишь минимальный конкретный пример этого.

Загрузите входной носитель:

      wget https://github.com/cirosantilli/media/raw/master/Ciro_Santilli_with_a_stone_carved_Budai_in_the_Feilai_Feng_caves_near_the_Lingyin_Temple_in_Hangzhou_in_2012.jpg
wget https://github.com/cirosantilli/media/raw/master/opengl-rotating-triangle.mp4

Сделайте так, чтобы размер изображения соответствовал размеру видео 1024x1024. Размер видео можно определить с помощью ffprobe:

      convert Ciro_Santilli_with_a_stone_carved_Budai_in_the_Feilai_Feng_caves_near_the_Lingyin_Temple_in_Hangzhou_in_2012.jpg -resize 1024x1024! background.jpg

Сделайте фактическое преобразование:

      ffmpeg -i background.jpg -i opengl-rotating-triangle.mp4 \
  -filter_complex '[1:v]colorkey=0x000000:0.1:[ckout];[0:v][ckout]overlay[out]' \
  -map '[out]' out.mp4

Преобразовать в gif только для предварительного просмотра этого ответа:

      ffmpeg -i out.mp4 -r 5 -vf "scale=300:-1,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" out.gif

Итак, в моем примере у меня был черный фон, который преобразуется в фиксированное изображение.

Предварительный просмотр результата (ужасный FPS для формата GIF в 2 МБ) для загрузки здесь:

Фактический вывод видео: https://www.youtube.com/watch?v=3aY6x7u86QQ

Исходные файлы ввода для справки:

opengl-вращающийся-треугольник.mp4

Ciro_Santilli_with_a_stone_carved_Budai_in_the_Feilai_Feng_caves_near_the_Lingyin_Temple_in_Hangzhou_in_2012.jpg

Он также работает только с видео-фоном.

      wget https://upload.wikimedia.org/wikipedia/commons/f/f9/STS-132_Liftoff_Space_Shuttle_Atlantis.ogv
ffmpeg -i STS-132_Liftoff_Space_Shuttle_Atlantis.ogv -i opengl-rotating-triangle.mp4 -filter_complex '[1:v]colorkey=0x000000:0.1:[ckout];[0:v]trim=start=0:end=8[cut0];[cut0][ckout]overlay[out]' -map '[out]' out.mp4

Здесь я добавил еще один параметр shortest=1 к overlay фильтр:

      overlay=shortest=1

чтобы остановить наложение, как только остановится видео с треугольником, в противном случае оно по умолчанию остановится, когда закончится гораздо более длинное видео Atlantis.

Вы также можете использовать trim фильтр, чтобы выбрать произвольный сегмент.

Видео об Атлантиде имеет разрешение 1920х1080, и окончательный результат тоже имел этот размер. Предварительный просмотр:

Актуальное видео: https://www.youtube.com/watch?v=HI8XniA2Bk8

Проверено на Ubuntu 20.10, FFmpeg 4.3.1.

Не совсем то, что я знаю

Opencv содержит все функции, необходимые для чтения видео, конвертирования в RGB, разделения цветовых плоскостей, замены основных цветов пикселей, объединения кадров и записи видео.

Это хорошо для исследования, но он не собирается создавать плагин DirectShow фильтр, чтобы сделать это автоматически

Этот ответ на похожий вопрос о Superuser предлагает использовать MLT.

С сайта MLT:

MLT - это мультимедийная платформа с открытым исходным кодом, разработанная и разработанная для телевизионного вещания. Он предоставляет инструментарий для вещателей, видеоредакторов, медиаплееров, транскодеров, веб-стримеров и многих других типов приложений. Функциональность системы обеспечивается за счет ассортимента готовых к использованию инструментов, компонентов для разработки XML и расширяемого API на основе подключаемых модулей. Самый простой способ попробовать и изучить MLT - загрузить Shotcut

Может помочь функция ChanVeseBinarize в Mathematica, см. Первое "Приложение" здесь: http://reference.wolfram.com/mathematica/ref/ChanVeseBinarize.html

Для автономной обработки вы должны последовательно импортировать каждое изображение, обрабатывать его, экспортировать наложение. В конце концов, вы создадите новое видео из всех наложенных изображений.

Предлагаю использовать для этого преобразования мою программу KVYcamBgr Standard и chromakey screen (опционально).

Вот результат его работы:

https://www.youtube.com/watch?v=IA1reoIT6j0

Там я добавил несколько эффектов хромакея. Кроме того, вы можете использовать любой источник (изображение, веб-камеру, фильм, рабочий стол, IP-камеру) в качестве фона в реальном времени.

Программа находится в свободном доступе, и вы можете найти ее здесь:

https://kvycambgr.com/

Как использовать фоновый режим здесь:

https://kvycambgr.com/docs/#background

Другие вопросы по тегам