作为我项目的一部分,我必须同步2个视频。由于我在python中实现它,我开始使用gstreamer。
我的管道看起来像这样
filesrc - > decoder-> queuev - > videobox
filesrc-1 - > decoder-> queuev1 - > videobox1
这两个视频框都像这样连接到调音台
[videobox 1和2] - >搅拌机 - > ffmpegcolorspace - > videosink
所有这些都在一个管道中。
但问题是当我运行代码时,我得到174%的CPU使用率,我认为并没有真正优化。有没有办法减少这个?因为即使我只是在并行管道中运行3个视频,我也可以获得14%的CPU使用率。
我也在这里上传部分代码。
self.pipeline = gst.Pipeline('pipleline')
self.filesrc = gst.element_factory_make("filesrc", "filesrc")
self.filesrc.set_property('location', videoloc1)
self.pipeline.add(self.filesrc)
self.decode = gst.element_factory_make("decodebin2", "decode")
self.pipeline.add(self.decode)
self.queuev = gst.element_factory_make("queue", "queuev")
self.pipeline.add(self.queuev)
self.video = gst.element_factory_make("autovideosink", "video")
self.pipeline.add(self.video)
self.filesrc_2 = gst.element_factory_make("filesrc", "filesrc2")
self.filesrc_2.set_property('location', videoloc2)
self.pipeline.add(self.filesrc_2)
self.decode_2 = gst.element_factory_make("decodebin2", "decode_2")
self.pipeline.add(self.decode_2)
self.queuev_2 = gst.element_factory_make("queue", "queuev_2")
self.pipeline.add(self.queuev_2)
self.mixer = gst.element_factory_make("videomixer2", "mixer")
self.pipeline.add(self.mixer)
self.videobox_1 = gst.element_factory_make("videobox", "videobox_1")
self.pipeline.add(self.videobox_1)
self.videobox_2 = gst.element_factory_make("videobox", "videobox_2")
self.pipeline.add(self.videobox_2)
self.ffmpeg1 = gst.element_factory_make("ffmpegcolorspace", "ffmpeg1")
self.pipeline.add(self.ffmpeg1)
gst.element_link_many(self.filesrc,self.decode)
gst.element_link_many(self.filesrc_2,self.decode_2)
gst.element_link_many(self.queuev,self.videobox_1,self.mixer,self.ffmpeg1,self.video)
gst.element_link_many(self.queuev_2,self.videobox_2,self.mixer)
答案 0 :(得分:0)
Videomixer正在使用cpu来混合视频。无论如何,要知道,运行一个分析器(oprofile,sysprof)来查看使用最多cpu的代码。此外,你没有说明所涉及的分辨率和色彩空间以及你运行它的硬件。因此很难说这是出乎意料的慢。 最后,您不需要混合视频来同步它们,您只需在一个管道中运行它们即可。这取决于您的申请,例如渲染到窗口中的单独绘图区域或其他任何内容。