2009-07-21 2 views
4

Я хотел бы написать простое приложение CLI для Linux, которое может принимать 2 видеоисточника (1 говорящего ведущего и 1 со своими слайдами и без звука) и объединить их.Могу ли я использовать API Gstreamer для объединения двух видео?

Я хотел бы, чтобы все выходные видео были двумя оригинальными видео, бок о бок. В противном случае моим вторым лучшим вариантом будет видео в стиле «картинка в картинке», а ведущий - в маленьком кадре в углу.

Из нескольких часов исследования GStreamer выглядит так может сможет это сделать. Может ли кто-нибудь подтвердить это, прежде чем тратить больше времени на это?

Если он не может, существуют ли другие API-интерфейсы, которые я мог бы использовать?

ответ

5

Оказывается, gstreamer может объединять два видео, размещая их бок о бок в выходном видео, используя фильтр видеомиксера.

Основной трубопровод, который принимает два входных файлов, масштабирует их быть один и тот же размер, а затем объединяет их и кодирует их в Theora видео может выглядеть следующим образом:

filesrc -> decodebin -> ffmpegcolourspace -> videoscale -> videobox -> videorate 
                        \ 
filesrc -> decodebin -> ffmpegcolourspace -> videoscale -> videorate -> videomixer -> ffmpegcolourspace -> theoraenc -> oggmux -> filesink 

Как реализовать этот трубопровод зависит от язык. Я прототип с привязками Ruby, и он работает очень хорошо.

+0

В настоящее время я просматриваю GStreamer для аналогичного приложения. Кажется, это отличное решение. Вы пишете конечное приложение на C или Ruby? – StackedCrooked

+0

Я закончил писать приложение в C. Приложениям с базовым gstreamer действительно требуется очень мало C, а в рубиновых привязках отсутствовали некоторые функции, которые мне нужны. –

+0

Является ли код открытым исходным кодом? Мне было бы интересно посмотреть на это. Если вы не можете поделиться им, все в порядке, я все равно выясню ... – StackedCrooked

0

AviSynth приходит мне в голову. Я использовал его много лет назад под Windows, и это довольно хорошо при произвольной пост-обработке. AviSynth v3 предполагается запускать изначально под Linux, но он еще далек от готовности. Однако есть инструменты для запуска предыдущей версии с Wine.

0

MEncoder можно сделать это изначально на linux. Вы можете разблокировать свой код или вызвать двоичный код.

9

Вот простой (рабочий) установки с использованием 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, чтобы записать результат в видеофайл.

+0

Возможно, вы захотите заменить видеомиксер (более новым и быстрым) videomixer2, если у вас есть его (см. Https://launchpad.net/~gstreamer-developers/+archive/ppa для пакетов Ubuntu Lucid) – Florian

Смежные вопросы