Несколько источников видео объединены в один - PullRequest
9 голосов
/ 28 сентября 2011

Я ищу эффективный способ сделать следующее:

Используя несколько исходных видео (примерно одинаковой длины), мне нужно сгенерировать выходное видео, которое состоит из всех исходных источников каждыйработает в своей области (как группа PIP s в нескольких разных размерах).Таким образом, конечный результат заключается в том, что все оригиналы работают бок о бок, каждый в своей области / боксе.

Источник и вывод должны быть flv, а платформа, которую я использую, - Windows(dev на Windows 7 64bit, развертывание на Windows Server 2008).

Я смотрел на avisynth , но, к сожалению, он не может обрабатывать flv и не из подключаемых модулей и разделителей flv Iпопробовал сработало.

Мой текущий процесс использует ffmpeg следующим образом:

  1. Используйте ffmpeg для генерации 25 png в секунду для видео, изменяя размер оригинала какНужно.
  2. Используйте пространство имен System.Drawing, чтобы объединить каждый набор кадров в новое изображение, начиная со статического фона, затем загружая каждый кадр в Image и рисуя в фоновом Graphics объекте -это дает мне объединенные кадры.
  3. Используйте ffmpeg, чтобы объединить сгенерированные изображения в видео.

Все это очень интенсивно требует ввода-вывода (что является моим узким местом на данный момент) иЕслиугорь, должен быть более эффективный способ достичь моей цели.У меня нет большого опыта в обработке видео, и я не знаю, какие есть варианты.

Кто-нибудь может предложить более эффективный способ их обработки?

1 Ответ

11 голосов
/ 28 сентября 2011

Делайте все внутри ffmpeg.Вы можете многое сделать с видеофильтрами .Например, чтобы объединить два видео рядом:

ffmpeg -i input0.avi -vf "movie=input1.avi [in1]; [in]pad=640*2:352[in0]; [in0][in1] overlay=640:0 [out]" out.avi

@ Одед: Это в основном то, что делает эта команда.Вы можете удалить фильтр pad и изменить параметры фильтра overlay, чтобы переместить второе видео в любое место.

ffmpeg -i big.avi -vf "movie=small.avi [small]; [in][small] overlay=10:10 [out]" out.avi

Ссылка, которую я предоставил, описывает синтаксис фильтра.Вы можете объединить несколько фильтров:

ffmpeg -i big.avi -vf "movie=small0.avi [small0]; [in][small0] overlay=10:10 [tmp];\
                       movie=small1.avi [small1]; [tmp][small1] overlay=30:10 [out]" out.avi
...