gstreamer将音频和视频编码为avi文件

时间:2017-08-21 08:03:36

标签: audio video gstreamer h.264 avi

我正在尝试使用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

我正在尝试根据this示例将它们与此管道结合起来:

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链接到多路复用”。

我知道这个例子正在使用lame进行编码,但是当gstremer documentation时,我宁愿不使用它,因为它在Ugly Plug-ins源中 说:“请注意,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

1 个答案:

答案 0 :(得分:0)

在深入研究Gstreamer文档后,我发现了这一点:http://trac.gateworks.com/wiki/Yocto/gstreamer/audio#Encoding 它列出了所有可用的编码器。

再次检查avimux我看到它可以接收audio / x-alaw格式的数据。 有了这个事实,我可以使用属于gst-plugins-good而不是alawenclamemp3enc

所以我的最终管道是这样的:

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