我正在尝试使用 gstreamer 将 h264 视频和音频编码为单个 .avi 文件。我可以使用此视频对音频或视频进行编码:
gst-launch-1.0 appsrc name=appsrc ! deinterlace name=deinterlace ! mfxh264enc name=mfxh264enc ! avimux name=mux ! filesink name=filesink location=test.avi
这对于音频:
gst-launch-1.0 alsasrc ! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=audioTestQueue.mp3
我试图根据这个例子将它们与这个管道结合起来:
gst-launch-1.0 appsrc name=appsrc ! deinterlace name=deinterlace ! mfxh264enc name=mfxh264enc ! queue name=queue1 ! mux. alsasrc name=alsasrc ! audioconvert name=audioconvert ! vorbisenc name=vorbisenc ! queue name=queue2 ! mux. avimux name=mux ! filesink name=filesink location=test.avi
这将返回一条错误消息:“无法将 queue2 链接到 mux”。
我知道该示例正在使用跛脚进行编码,但当 gstremer文档说:“请注意,MP3 不是一种免费格式,存在许可和专利问题考虑到。请参阅 Ogg/Vorbis 以获取免版税(通常质量更高)的替代方案。”
我究竟做错了什么?
编辑:
似乎在将声音设置为 audiotestsrc 并禁用音频编码 gstreamer 时会创建 .avi 文件,我可以在 VLC 中播放它:
gst-launch-1.0 appsrc name=appsrc1 ! deinterlace name=deinterlace1 ! mfxh264enc name=mfxh264enc1 ! queue name=queue11 ! mux. audiotestsrc name=alsasrc1 ! audioconvert name=audioconvert1 ! queue name=queue31 ! mux. avimux name=mux ! filesink name=filesink1 location=test.avi
但是尝试对 alsasrc 做同样的事情会使 avi 文件只保存音频数据而不保存视频:
gst-launch-1.0 appsrc name=appsrc1 ! deinterlace name=deinterlace1 ! mfxh264enc name=mfxh264enc1 ! queue name=queue11 ! mux. alsasrc name=alsasrc1 ! audioconvert name=audioconvert1 ! queue name=queue31 ! mux. avimux name=mux ! filesink name=filesink1 location=/home/user/Downloads/HDTest1.avi
在深入研究 Gstreamer 文档后,我发现了这一点:http ://trac.gateworks.com/wiki/Yocto/gstreamer/audio#Encoding其中列出了所有可用的编码器。
再次检查avimux我看到它可以接收音频/x-alaw 格式的数据。对于这个事实,我可以使用alawenc属于GST-plugins的好,而不是lamemp3enc。
所以我最后的管道是这样的:
gst-launch-1.0 alsasrc name=pulsesrc1 ! audioconvert name=audioconvert1 ! alawenc name=alawenc1 ! queue name=aud1 ! mux. appsrc name=appsrc1 ! deinterlace name=deinterlace1 ! mfxh264enc name=mfxh264enc1 ! mux. avimux name=mux ! filesink name=filesink1 location=HDTest1.avi
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句