Вот простой (рабочий) установки с использованием GST-запуск (УСТАНАВЛИВАЕТЕ GStreamer-Tools пакет на Ubuntu/Debian):
GST-запуск v4l2src устройства =/Dev/video1! videocale! ffmpegcolorspace! video/x-raw-yuv, width = 640, height = 480! videoobox border-alpha = 0 left = -640! имя видеомикшера = mix! ffmpegcolorspace! xvimagesink v4l2src! videocale! ffmpegcolorspace! video/x-raw-yuv, width = 640, height = 480! videobox right = -640! смешивание.
Это в основном считывает два видео, используя видео 4 linux 2, один из устройства по умолчанию и другой поток из/dev/video1. Возможно, вы захотите изменить это, если ваша настройка отличается.
Первая часть (не жирная) отвечает за чтение видео с устройства захвата, согласование размера и цветового пространства (videocale! Ffmpegcolorspace), форсирование определенного видеоформата (видео/x-raw-yuv, width = 640, высота = 480), добавив 640 прозрачных пикселей влево (тем самым перемещая изображение вправо) и создавая видеомиксер с именем «mix». Наконец, он автоматически согласовывает цветовое пространство и отображает результат с помощью окна XVideo.
Вторая часть (выделено жирным шрифтом) считывает второй поток видео (от устройства захвата по умолчанию, добавьте устройства =/DEV/videoX выбрать другое устройство), а затем делает то же самое пространства цветов, размер переговоров и видео формат выбор для первого потока, затем перемещает видео 640 пикселей влево и подает результат на элемент с именем mix (наш видеомикшер).Требуется точка в конце и инструктирует gstreamer искать существующий элемент с именем «mix» вместо поиска фильтра.
Вы можете заменить v4l2src device =/dev/video1 с filesrc location = video.avi! decodebin, чтобы получить входные данные из видеофайла.
Заменить xvimagesink с jpegenc! avimux! filesink location = out.avi, чтобы записать результат в видеофайл.
В настоящее время я просматриваю GStreamer для аналогичного приложения. Кажется, это отличное решение. Вы пишете конечное приложение на C или Ruby? – StackedCrooked
Я закончил писать приложение в C. Приложениям с базовым gstreamer действительно требуется очень мало C, а в рубиновых привязках отсутствовали некоторые функции, которые мне нужны. –
Является ли код открытым исходным кодом? Мне было бы интересно посмотреть на это. Если вы не можете поделиться им, все в порядке, я все равно выясню ... – StackedCrooked