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