Объединение нескольких видео в одно

У меня есть три видео:

  • лекция, снятая на видеокамеру
  • видео захвата рабочего стола компьютера, используемого в лекции
  • и видео доски

Я хочу создать финальное видео с этими тремя компонентами, занимающими определенную область экрана.

Есть ли программное обеспечение с открытым исходным кодом, которое позволит мне это сделать (mencoder, ffmpeg, virtualdub..)? Что вы рекомендуете?

Или есть C/C++ API, который позволит мне создать что-то подобное программно?

Изменить
В будущем будет несколько записанных лекций. Это означает, что мне нужно универсальное/автоматизированное решение.

В настоящее время я проверяю, смогу ли я написать приложение с GStreamer для выполнения этой работы. Есть комментарии по этому поводу?

Решено!
Мне удалось сделать это с помощью элемента видеомикшера GStreamer. Я использую синтаксис gst-launch для создания конвейера, а затем загружаю его с помощью gst_parse_launch. Это действительно продуктивный способ реализации сложных конвейеров.

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

  desktop. ! queue
           ! ffmpegcolorspace
           ! videoscale
           ! video/x-raw-yuv,width=640,height=480
           ! videobox right=-320
           ! ffmpegcolorspace
           ! vmix.sink_0
  webcam. ! queue
          ! ffmpegcolorspace
          ! videoscale
          ! video/x-raw-yuv,width=320,height=240
          ! vmix.sink_1
  logo. ! queue
        ! jpegdec
        ! ffmpegcolorspace
        ! videoscale
        ! video/x-raw-yuv,width=320,height=240
        ! vmix.sink_2
  vmix. ! t.
  t. ! queue
     ! ffmpegcolorspace
     ! ffenc_mpeg2video
     ! filesink location="recording.mpg"
  t. ! queue
     ! ffmpegcolorspace
     ! dshowvideosink
  videotestsrc name="desktop"
  videotestsrc name="webcam"
  multifilesrc name="logo" location="logo.jpg"
  videomixer name=vmix
             sink_0::xpos=0 sink_0::ypos=0 sink_0::zorder=0
             sink_1::xpos=640 sink_1::ypos=0 sink_1::zorder=1
             sink_2::xpos=640 sink_2::ypos=240 sink_2::zorder=2
  tee name="t"

person StackedCrooked    schedule 10.11.2009    source источник
comment
Или вы можете выполнить все это примерно за 30 секунд с помощью Adobe After Effects (при условии, что цена немного выше, чем бесплатная).   -  person Adam    schedule 18.05.2010


Ответы (4)


Это можно сделать с помощью ffmpeg; Я сделал это сам. Тем не менее, это технически сложно. Тем не менее, опять же, это то, что любое другое программное обеспечение, которое вы можете использовать, будет делать по своей сути.

Процесс работает следующим образом:

  1. Demux audio from source 1 to raw wav
    • Demux audio from source 2
    • Демультиплексирование звука из источника 3
    • Демультиплексирование видео из источника 1 в MPEG1
    • Демультиплексирование видео из источника 2
    • Демультиплексирование видео из источника 3
    • Объединить аудио 1 + аудио 2 + аудио 3
    • Объединить видео 1 + видео 2 + видео 3
    • Мультиплексируйте аудио 123 и видео 123 в цель
    • кодировать в целевой формат

Я думаю, что людей удивляет то, что вы можете буквально объединить два необработанных аудиофайла PCM wav, и результат будет действительным. Что действительно удивляет людей, так это то, что вы можете сделать то же самое с видео MPEG1/h.261.

Как я уже сказал, я сделал это. Есть некоторые особенности, опущенные, но это определенно работает. Моя программа была сделана в скрипте bash с ffmpeg. Хотя я никогда не использовал C API ffmpeg, я не понимаю, почему вы не можете использовать его для того же самого.

Это очень образовательный проект, если вы склонны. Если ваша цель состоит в том, чтобы просто собрать несколько видеороликов для одноразового проекта, то, возможно, лучше использовать инструмент с графическим интерфейсом.

person Stu Thompson    schedule 10.11.2009
comment
Похоже, я буду много заниматься подобными вещами в будущем, поэтому я действительно хочу глубоко изучить это. Спасибо за информацию! - person StackedCrooked; 11.11.2009
comment
Разве он не спрашивает о компоновке видео таким образом, чтобы все три видео отображались одновременно в одном кадре? Похоже, это просто объединение видео, чтобы они воспроизводились одно за другим. - person Jason B; 11.11.2009
comment
Хм... на самом деле, я думаю, что вы можете быть правы. Да, я ответил, что это «просто» объединение. На самом деле, я даже дважды использовал слово «конкатенация». - person Stu Thompson; 11.11.2009

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

person Charles Salvia    schedule 10.11.2009

вы можете объединить несколько видеофайлов/потоков в одно изображение с помощью VLC:

есть интерфейс командной строки, так что вы можете написать/автоматизировать его.

http://wiki.videolan.org/Mosaic

person frisbee23    schedule 10.01.2012

avisynth может сделать это довольно легко. См. пример здесь в разделе "Мозаика".

Я довольно часто использовал ffmpeg и никогда не сталкивался с этой функциональностью, но это не значит, что ее нет. Вы всегда можете сделать это самостоятельно на C или C++ с помощью libavformat и libavcodec (библиотеки ffmpeg), если вы ищете проект, но вам придется сильно запачкать руки, создавая видео самостоятельно. Если вы просто хотите сделать видео, а не возиться с кодом, обязательно используйте готовый инструмент, такой как avisynth или virtualdub.

person Jason B    schedule 10.11.2009