使用python和gstreamer将webm视频转换为avi视频

使用python和gstreamer将webm视频转换为avi视频,python,gstreamer,Python,Gstreamer,我想用python编写一个gstramer管道,将webm视频转换成avi视频 我制作了管道来显示webmvideo,它可以工作。 如何实现我想要的? 我认为只要在视频队列中添加“x264”元素,在音频队列中添加“lame”元素就足够了。 我注意到多路复用器是必要的,我同意这一点。 我得到的是: gst.element\u link\u many(self.queuev、self.video\u解码器、色彩空间、x264enc) gst.element\u link\u many(self.qu

我想用python编写一个gstramer管道,将webm视频转换成avi视频

我制作了管道来显示webmvideo,它可以工作。 如何实现我想要的? 我认为只要在视频队列中添加“x264”元素,在音频队列中添加“lame”元素就足够了。 我注意到多路复用器是必要的,我同意这一点。 我得到的是:

gst.element\u link\u many(self.queuev、self.video\u解码器、色彩空间、x264enc)
gst.element\u link\u many(self.queuea、self.audio\u解码器、audioconv、lame)
gst.element\u link\u many(avimux、filesink)

其中有一个使用音频解码器和视频解码器的特定功能,即:

def demuxer\u回调(self、demuxer、pad):
如果pad.get_属性(“模板”).name_template==“video_uu%02d”:
qv_pad=self.queuev.get_pad(“接收器”)
焊盘连接(qv_焊盘)
elif pad.get_属性(“模板”)。name_template==“audio_u%02d”:
qa_pad=self.queuea.get_pad(“接收器”)
pad.link(qa_-pad)

我想我必须为avimux编写类似的代码。 我已经做到了:

 def avimux_callback(self, avimux, pad1):
    if pad1.get_property("template").name_template == "video_%02d":
        qv_pad1 = self.queuev.get_pad("sink")
        pad1.link(qv_pad1)
    elif pad1.get_property("template").name_template == "audio_%02d":
        qa_pad1 = self.queuea.get_pad("sink")
        pad1.link(qa_pad1)
但是我得到了一个关于文件源的错误,脚本无法工作。 建议?? 谢谢
FrankBr

我建议在编写Python脚本之前先使用gst launch进行测试。要转换为AVI,请使用类似以下内容的
!x264enc!阿维穆克斯!filesink location=test.avi
。还可以使用
GST\u debug
@Dejan I code:GST-launch-0.10 filesrc location=video.webm!提供脚本的调试输出!matroskademux name=demux!队列vp8dec!ffmpegcolorspace!text叠加text=“ciao”!x264enc!avimux name=mux!filesink location=newfile.avi demux!队列进度报告!沃比斯德克!音频转换!音频重采样!瘸的多路复用器。但是我得到了(当我播放文件时):
gsttypefindelement.c(954):gst\u type\u find\u element\u activate():/GstPlayBin2:play/GstURIDecodeBin:uridecodebin0/GstDecodeBin2:decodebin20/gsttypefindelement:typefind:cannot typefind空流
我得到了。我使用的管道:
gst-launch-0.10 filesrc location=video.webm!decodebin2 name=解码器!队列听力!音频转换!legacyresample!瘸的mp3parse!队列穆克瑟。解码器!队列ffmpegcolorspace!x264enc!队列matroskamux name=muxer!filesink location=file.mkv
我使用了matroskamux而不是avimux。