简体   繁体   中英

gstreamer encoding audio and video to avi file

I am trying to use the gstreamer to encode h264 video and audio in to a single .avi file. I'm able to encode audio or video using this for video:

gst-launch-1.0 appsrc name=appsrc ! deinterlace name=deinterlace ! mfxh264enc name=mfxh264enc ! avimux name=mux ! filesink name=filesink  location=test.avi

and this for audio:

gst-launch-1.0 alsasrc ! queue ! audioconvert ! vorbisenc ! oggmux ! filesink location=audioTestQueue.mp3

I'm trying to combine them according to this example with this pipe:

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

this returns an error saying: "could not link queue2 to mux".

I know that the example is using the lame to encode but I rather not using it as it is in the Ugly Plug-ins source when the gstremer documentation say: "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."

what am I doing wrong?

EDIT:
it seems that when setting the sound to the audiotestsrc and disabling the audio encodeing gstreamer creates the .avi file and I'm able to play it in 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

but trying to do the same with alsasrc makes the avi file to save only the audio data without the video:

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

After digging more into the Gstreamer documentation I discovered this: http://trac.gateworks.com/wiki/Yocto/gstreamer/audio#Encoding where it list all the encoders avilable.

Checking the avimux again I saw it can receive data in the audio/x-alaw format. with that fact I can use the alawenc that belongs to the gst-plugins-good instead of the lamemp3enc .

so my final pipe is as so:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM