Созданные пользователем композитные видеоролики с хроматическим ключом с помощью FFMPEG / AVCONV
Я хочу создать систему, в которой пользователь может загрузить два видео на веб-сайт, один из которых имеет синий экран на заднем плане, а веб-сайт использует AVCONV (или аналогичный) для создания сводного видео из двух с использованием техники Chroma Key (он же синий скрининг).
Можно ли использовать AVCONV таким образом?
Согласно этому посту на SO статическое изображение может быть Chrome Keyed в фоновом режиме. Но можно ли сделать то же самое с видео?
Я также хотел бы знать, должны ли два видео быть одинаковой длины и формата, прежде чем они могут быть объединены? Есть ли какие-то другие технические соображения, на которые я должен обратить внимание, чтобы иметь возможность предложить такую услугу?
Заранее спасибо.
3 ответа
Ни AVconv, ни FFmpeg в настоящее время не могут это сделать - это одна из основных задач обработки видео, которую они не могут выполнить.
Эти инструменты могут накладывать изображение или видео с прозрачным фоном на другое видео или изображение - это то, к чему вы так привязали этот вопрос. Тем не менее, видео с прозрачным фоном должно быть в формате видео, который поддерживает прозрачность (большинство из них этого не делают) - я бы использовал qtrle
Анимационный кодек Apple. Но они не могут выполнять фактическую хроматизацию (превращая определенный цвет в прозрачный).
Вероятно, вы могли бы использовать обходной путь, включающий avconv и ImageMagick, но это было бы довольно нагружающим ЦП, и я не знаю, насколько хороши ваши результаты. Вам необходимо:
- Превратите видео, которое вы хотите в хроматический ключ, в отдельные кадры с помощью avconv
- Используйте инструмент ImageMagick для преобразования (или mogrify), чтобы выполнить хроматический ключ для каждого отдельного кадра.
- Сшиваем кадры вместе с avconv и размещаем поверх фонового видео
Вы можете упростить процесс, используя трубы.
Чтобы извлечь кадры (создает файлы, которые выглядят как 00001.png, 00002.png и т. Д.):
avconv -i input.mp4 %05d.png
Чтобы соединить их вместе и поместить поверх фонового видео после запуска ImageMagick над ними:
avconv -f image2 -r 25 -i %05d.png -i background.mp4 \
-filter_complex '[1:v][0:v]overlay[out]' \
-map [out] -c:v libx264 -crf 23 -preset veryfast output.mp4
-r 25
дает вам частоту кадров 25; если вы хотите другую частоту кадров, просто используйте другое число. Убедитесь, что вы используете ту же частоту кадров, что и в исходном видео. Если вы хотите взять звук с исходного входа, используйте
avconv -f image2 -r 25 -i %05d.png -i background.mp4 -i input.mp4 \
-filter_complex '[1:v][0:v]overlay[out]' \
-map [out] -map 2:a -c:v libx264 -crf 23 -preset veryfast -c:a copy output.mp4
Обратите внимание, что некоторые версии AVconv (например, версия в репозиториях Ubuntu) не имеют поддержки графов фильтров. Если это так, перейдите на более новую версию avconv или ffmpeg.
Что касается этапа 2... Я на самом деле не уверен, как это сделать, но я знаю, что ImageMagick может выполнять хроматическую клавиатуру. Вот несколько ссылок, которые вы можете найти полезными:
http://www.imagemagick.org/Usage/photos/
http://www.imagemagick.org/discourse-server/viewtopic.php?t=14394
http://tech.natemurray.com/2007/12/convert-white-to-transparent.html
Из-за различий в освещении и т. Д. Между образцами, которые вам дадут, вам придется что-то использовать, чтобы определить точные оттенки синего, чтобы избавиться от них. Вам, вероятно, придется оставить это на усмотрение ваших пользователей, возможно, используя ffmpeg для создания миниатюры, а затем с помощью пипетки для выбора цвета фона.
Вы можете сделать это с помощью MLT
melt https://archive.org/download/IMB_SF_R35_C8/IMB_SF_R35_C8_512kb.mp4 in=400 \
-track https://archive.org/download/IMB_SF_R19_C9/IMB_SF_R19_C9_512kb.mp4 in=450 \
-filter chroma key=0x00ff0000 variance=0.45 \
-transition composite
Воспроизводится фоновое видео и клип с зеленым экраном собаки в качестве второго трека, сложенного сверху. Он использует хроматический ключ (установлен на зеленый цвет с некоторой дисперсией), чтобы применить альфа к зеленым областям, позволяя прозрачному фону просвечивать. in=XXX
просто обрезать некоторые ведущий мусор на используемых видеоклипах.
Хроматический ключ доступен в ffmpeg с версии 3.0, перед этим вы можете использовать опцию colorkey
ffmpeg -f mpeg -i input.mp4 -i video.mp4 -shortest -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp4
для colorkey в ffmpeg v2.8 или выше
ffmpeg -f mpeg -i input.mp4 -i video.mp4 -shortest -filter_complex "[1:v]colorkey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mp
Оба из них работают на меня.