当前位置:  开发笔记 > 后端 > 正文

我可以使用Gstreamer API合并2个视频吗?

如何解决《我可以使用GstreamerAPI合并2个视频吗?》经验,为你挑选了2个好方法。

我想写一个简单的Linux CLI应用程序,可以拍摄2个视频源(1个演示者讲话,1个幻灯片,没有音频)并合并它们.

我希望整个输出视频是两个原创视频,并排.如果做不到这一点,我的第二个最佳选择将是"画中画"风格的视频,主持人在角落里的一个小框架中.

从几个小时研究,GStreamer的看起来可能能够做到这一点.任何人都可以在我花更多时间尝试之前确认吗?

如果不能,那么我可以使用其他API吗?



1> Florian..:

这是一个使用gst-launch的简单(工作)设置(在Ubuntu/Debian上安装gstreamer-tools包):

gst-launch v4l2src device =/dev/video1!视频!ffmpegcolorspace!video/x-raw-yuv,width = 640,height = 480!视频框边界-α= 0左= -640!videomixer name = mix!ffmpegcolorspace!xvimagesink v4l2src!视频!ffmpegcolorspace!video/x-raw-yuv,width = 640,height = 480!视频框右= -640!混合.

这基本上使用视频4 linux 2读取两个视频,一个来自默认设备,另一个来自/ dev/video1.如果您的设置不同,您可能想要更改它.

第一部分(非粗体)负责从捕获设备读取视频,协商大小和颜色空间(视频!ffmpegcolorspace),强制使用特定的视频格式(video/x-raw-yuv,width = 640,height = 480),向左添加640个透明像素(从而将图片向右移动)并创建名为"mix"的视频混合器.最后,它再次自动协商色彩空间并使用XVideo窗口显示结果.

第二部分(粗体)读取第二个视频流(来自默认捕获设备,添加device =/dev/videoX以选择不同的设备),然后执行与第一个流相同的颜色空间,大小协商和视频格式选择,然后将视频向左移动640像素,并将结果提供给名为mix(我们的视频混合器)的元素.最后的点是必需的,并指示gstreamer搜索名为"mix"的现有元素,而不是查找过滤器.

你可以用filesrc location = video.avi替换v4l2src device =/dev/video1 !decodebin从视频文件中获取输入.

jpegenc替换xvimagesink !avimux!filesink location = out.avi将结果写入视频文件.



2> James Healy..:

事实证明,gstreamer可以合并两个视频,使用视频混合滤波器将它们并排放入输出视频中.

一个基本管道,它接收两个输入文件,将它们缩放为相同的大小,然后合并它们并将它们编码为theora视频可能如下所示:

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

如何实现此管道取决于语言.我使用Ruby绑定原型,并且它工作得非常好.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有