У меня есть три видео:
- лекция, снятая на видеокамеру
- видео захвата рабочего стола компьютера, используемого в лекции
- и видео доски
Я хочу создать финальное видео с этими тремя компонентами, занимающими определенную область экрана.
Есть ли программное обеспечение с открытым исходным кодом, которое позволит мне это сделать (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"