2

Я хочу создать систему, в которой пользователь может загрузить два видео на веб-сайт, одно из которых имеет синий экран на заднем плане, а веб-сайт использует AVCONV (или аналогичный) для создания сводного видео из двух с использованием техники Chroma Key ( он же синий скрининг).

Можно ли использовать AVCONV таким образом?

Согласно этому посту на SO статическое изображение может быть Chrome Keyed в фоновом режиме. Но можно ли сделать то же самое с видео?

Я также хотел бы знать, должны ли два видео быть одинаковой длины и формата, прежде чем они могут быть объединены? Есть ли какие-то другие технические соображения, на которые я должен обратить внимание, чтобы иметь возможность предложить такую услугу?

Заранее спасибо.

3 ответа3

3

Вы можете сделать это с помощью 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 просто для того, чтобы обрезать какой-то ведущий мусор на используемых видеоклипах.

2

Ни AVconv, ни FFmpeg в настоящее время не могут это сделать - это одна из основных задач обработки видео, которую они не могут выполнить.

Эти инструменты могут накладывать изображение или видео с прозрачным фоном на другое видео или изображение - это то, к чему вы так привязали этот вопрос. Однако видео с прозрачным фоном должно быть в видеоформате, который поддерживает прозрачность (большинство из них не поддерживают) - я бы использовал qtrle (кодек Apple Animation). Но они не могут выполнять фактическую хроматизацию (превращая определенный цвет в прозрачный).

Возможно, вы могли бы использовать обходной путь, включающий avconv и ImageMagick, но он был бы довольно интенсивно загружающим ЦП, и я не знаю, насколько хороши ваши результаты. Вам необходимо:

  1. Превратите видео, которое вы хотите в хроматический ключ, в отдельные кадры с помощью avconv
  2. Используйте инструмент ImageMagick для преобразования (или mogrify), чтобы выполнить хроматический ключ для каждого отдельного кадра.
  3. Сшиваем кадры вместе с 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/#chroma_key
http://www.imagemagick.org/discourse-server/viewtopic.php?t=14394
http://tech.natemurray.com/2007/12/convert-white-to-transparent.html

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

0

хроматический ключ доступен в 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

Оба из них работают на меня.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .