gstreamer将音视频编码成avi文件
gstreamer encoding audio and video to avi file
我正在尝试使用 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
这是一个 returns 错误提示:"could not link queue2 to mux".
我知道该示例使用 lame 进行编码,但我宁愿不使用它,因为当 gstremer documentation
说:"Note that MP3 is not a free format, there are licensing and patent issues to take into consideration. See Ogg/Vorbis for a royalty free (and often higher quality) alternative."
我做错了什么?
编辑:
似乎将声音设置为 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,我看到它可以接收audio/x-alaw格式的数据。
有了这个事实,我可以使用 alawenc that belongs to the gst-plugins-good instead of the 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
我正在尝试使用 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
这是一个 returns 错误提示:"could not link queue2 to mux".
我知道该示例使用 lame 进行编码,但我宁愿不使用它,因为当 gstremer documentation 说:"Note that MP3 is not a free format, there are licensing and patent issues to take into consideration. See Ogg/Vorbis for a royalty free (and often higher quality) alternative."
我做错了什么?
编辑:
似乎将声音设置为 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,我看到它可以接收audio/x-alaw格式的数据。 有了这个事实,我可以使用 alawenc that belongs to the gst-plugins-good instead of the 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