プロジェクトの一環として、2 つのビデオを同期する必要があります。私はPythonで実装しているので、gstreamerを使い始めました。
私のパイプラインは次のようになります
filesrc -> デコーダー -> queuev -> ビデオボックス
filesrc-1 -> デコーダー -> queuev1 -> videobox1
これらのビデオボックスは両方とも、このようにミキサーに結合されています
[ビデオボックス 1 と 2] -> ミキサー -> ffmpegcolorspace ->videosink
それらはすべて単一のパイプラインにあります。
しかし、ここでの問題は、コードを実行すると、実際には最適化されていないと思われる 174% の CPU 使用率になることです。これを減らす方法はありますか?並列パイプラインで 3 つのビデオを単純に実行しても、CPU 使用率が 14% になるからです。
また、ここにコードの一部をアップロードしています。
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)