Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
gstreamer [2012/02/17 09:58]
109.230.216.60 FCWnKdHBcGvvPNq
gstreamer [2012/02/18 13:29] (current)
brot old revision restored
Line 1: Line 1:
-Dead Like Me RocksI am adctdied to my NetflixI have not actually watched my TV in a whileTonight its Toy Story 3Last week was Sex and the City 2, Shrek (the latest one..)And I have NO kids so go ahead and make assumptions ha ha.+====== Videos umwandeln mit dem GStreamer Framework ====== 
 + 
 +===== GStreamer? ===== 
 + 
 +GStreamer ist ein Video-Framework,​ das eigentlich Anwendungsentwicklern helfen soll, mit Multimediaformaten umzugehen. Mithilfe von gst-launch kann man aber das in viele Plugins zerlegte Framework auch so nutzen. Jedes Plugin hat eine/​mehrere "​source"​ und einen/​meherere "​sink"​. So kann man die ganzen Plugins in eine Kette hängen, angefangen vom lesen einer Datei, über das umwandeln des Videos und dem Muxen über das speichern in eine Datei 
 + 
 +==== Installation ==== 
 + 
 +Sollte auf den meisten Linux-Distributionen über die gst-plugins-[good,​bad,​ugly] (oder ähnlich) Pakete gehn. OS X hat bestimmt irgendnen Port. FIXME Windows? 
 + 
 +==== Informationen über Plugins ==== 
 + 
 +    gst-inspect 
 + 
 +Alleine aufgerufen listet die installierten Plugins auf. Mag man z.B wissen was das "​vorbisenc"​ denn alles verwursten kann, gibt man 
 + 
 +    gst-inspect vorbisenc 
 +     
 +ein. 
 + 
 +===== Beispiele ===== 
 + 
 +=== Praktische Decodebins=== 
 + 
 +  gst-launch-0.10 filesrc location="​Downloads/​tues_11_16.flv" ​decodebin name=dec ​ dec. ! ffdec_flv ! videoscale method=2 ! video/​x-raw-yuv,​width=853,​height=480 ! vp8enc threads=2 mode=vbr ! webmmux name="​mux"​ ! filesink location=honcast.webm ​ dec. ! audioconvert ! vorbisenc quality=0.2 ! queue ! mux.audio_0 
 + 
 + 
 +=== DVD -> WebM  === 
 + 
 +  gst-launch-0.10 dvdreadsrc title=1 ! dvddemux name=demux ​ demux.current_video ! queue ! mpeg2dec ! vp8enc threads=2 quality=8 speed=0 max-latency=25 mode=vbr ! queue ! webmmux name="​mux"​ ! filesink location=oceans11.ivf ​ demux.current_audio ! queue ! a52dec mode=2 ! vorbisenc quality=0.4 ! queue ! mux.audio_0 
 +   
 +Speichert den ersten Titel einer DVD im WebM Format ab - also VP8 als Videocodec und Vorbis als Audiocodec. VP8 ist der derzeit beste freie Videocodec, und auch der einzige freie Videocodec der mit h264 in einer Liga spieltGStreamer unterstützt den Codec und den WebM Container seit dem 31.05.2010 ( gst-plugins-good 0.10.23, gst-plugins-ugly 0.10.15, gst-plugins-bad 0.10.19 ), noch werden nicht alle Optionen des VP8-Videocodecs über GStreamer angeboten. Die Optionen für VP8 sind [[http://​www.webmproject.org/​tools/​encoder-parameters/​|auf der Website des WebM-Projekts]] erklärt, die von GStreamer anpassbaren findet man über gst-inspect vp8enc 
 + 
 +=== DVD -> MKV (high-quality x264 + vorbis) === 
 + 
 +  gst-launch-0.10 dvdreadsrc title=1 ! dvddemux name=demux ​ demux.current_video ! queue ! mpeg2dec ! x264enc quantizer=25 threads=2 pass=qual me=2 subme=6 ref=6 b-pyramid=true weightb=true ! queue ! matroskamux name="​mux"​ ! filesink location=oceans11.mkv ​ demux.current_audio ! queue ! a52dec mode=2 ! vorbisenc quality=0.4 ! queue ! mux.audio_0 
 + 
 +Speichert den ersten Titel einer DVD als h264 Video und Vorbis Audio in einem MKV. Der x264-encoder hat recht viele Features an, das .mkv wird also nicht auf schwachen Systemen abspielbar sein, dafür braucht die gewünschte Qualität ( wird über die "​quantizer"​ funktion angepasst ) sehr wenig Platz. Die ganzen Optionen sind [[http://​trac.handbrake.fr/​wiki/​x264Options|im Handbrake wiki]] schön erklärt. 
 + 
 + 
 +=== PNGs+FLAC -> WebM === 
 + 
 + 
 +    gst-launch-0.10 webmmux name="​mux"​ ! filesink location=test.ivf . multifilesrc location="/​home/​brot/​sintel_trailer-720/​sintel_trailer_2k_%04d.png"​ index="​1"​ caps="​image/​png,​framerate=24/​1"​ ! pngdec ! ffmpegcolorspace ! video/​x-raw-yuv,​format=\(fourcc\)I420 ! vp8enc threads=2 quality=8 speed=0 max-latency=25 mode=vbr ! multiqueue ! mux. filesrc location="/​home/​brot/​sintel_trailer-720/​sintel_trailer-audio.flac"​ ! flacdec ! audioconvert ! vorbisenc quality=0.25 ! mux. 
 +     
 +Um Videocodecs zu testen kommen teilweise PNG's zum einsatz, um sich nicht Arteafakte vorheriger Videocodecs einzufangen. 
 + 
 +Anmerkung: Am Anfang wird der filesink definiert, mit dem namen "​mux"​. Danach kommt die Video- und die Ton-Pipeline,​ die beide mit "​mux."​ aufhören, was den Stream durch den webmmuxer in den filesink leitet. 
 + 
 +=== y4m -> WebM === 
 + 
 +  gst-launch-0.10 webmmux name="​mux"​ ! filesink location=test.ivf . filesrc location="​sunflower.y4m"​ ! ffdemux_yuv4mpegpipe ! vp8enc threads=quality=8 speed=0 max-latency=25 mode=vbr ! multiqueue ! mux. 
 + 
 +Manchmal kommen zum testen auch y4m Videos zum Einsatzwas im Endeffekt die YCbCr Einzelbilder in einem mpeg-Container sind 
 +===== Ablage ;) ===== 
 + 
 +=== abspielen der ip-webcam ​(android webcam dingen) === 
 + 
 +   ​gst-launch-0.10 -v souphttpsrc location="​http://​10.10.14.113:​8080/​videofeed"​ do-timestamp=true ! multipartdemux ! image/jpeg, width=640,​height=480,​ framerate=15/​1 ! jpegdec ! ffmpegcolorspace ! ximagesink 
 + 
 +=== mkv -> shoutcast+local === 
 +   ​gst-launch-0.10 --eos-on-shutdown filesrc location=/​media/​input.mkv ! queue ! matroskademux name="​input"​ input. ! queue ! decodebin ! ffvideoscale method=2 ! video/​x-raw-yuv,​ width=640, height=360 ! tee name=vdec ! queue ! theoraenc bitrate=451 ! queue ! oggmux name="​mux"​ mux. ! queue max-size-bytes=100000 max-size-time=1 ! shout2send ip=minad.de port=8000 password=minadrulez mount=/​brot.ogg streamname='​brot'​ input. ! queue ! decodebin ! tee name=adec ! audioconvert ! vorbisenc ! queue ! mux. vdec. ! queue ! xvimagesink adec. ! queue ! pulsesink 
 + 
 +=== webcam -> shoutcast === 
 +  time gst-launch-0.10 --eos-on-shutdown v4l2src ! '​video/​x-raw-yuv,​ format=(fourcc)YUY2, width=640, height=480, framerate=15/​1'​ ! queue max-size-bytes=100000000 max-size-time=0 ! ffmpegcolorspace ! theoraenc bitrate=300 ! oggmux ! tee name=ogged ! queue max-size-bytes=100000000 max-size-time=0 ! oggdemux ! theoradec ! xvimagesink sync=false force-aspect-ratio=true ogged. ! queue max-size-bytes=100000000 max-size-time=0 ! filesink location=`date +%F_%T`.ogv ogged. ! queue max-size-bytes=100000000 max-size-time=0 ! shout2send ip=media.basilgohar.com port=8000 password=**** mount=/​basil-at-work.ogv streamname='​Basil at Work' description='​Live video stream of me at work' genre='​Webcam'​ url='​http://​media.basilgohar.com/​stream/'​ ogged. 
 + 
 + 
 +=== DVD's Abspielen === 
 +  gst-launch-0.10 dvdreadsrc title=1 ! dvddemux name=demux demux.current_audio ! queue ! a52dec ! audioconvert ! pulsesink demux. ! mpeg2dec ! xvimagesink 
 +   
 +=== DVDs umwandeln und eine falsche 4:3 aspect ratio korrigieren === 
 + 
 +  gst-launch-0.10 dvdreadsrc device=/​home/​nudelundbrot/​einsteins_2010_.iso title=1 ! dvddemux name=demux ​ demux.current_video ! queue ! mpeg2dec! postproc_cubicipoldeint ! ffvideoscale method=2 ! video/​x-raw-yuv,​ width=512, height=288 ! theoraenc quality=25 drop-frames=false ! queue ! oggmux name="​mux"​ ! filesink location=einsteins2010.ogg ​ demux.current_audio ! queue ! a52dec mode=2 ! vorbisenc quality=0.2 ! queue ! mux.sink_1 
 + 
 +  gst-launch-0.10 dvdreadsrc device=/​home/​nudelundbrot/​einsteins_2010_.iso title=1 ! dvddemux name=demux ​ demux.current_video ! queue ! mpeg2dec ! deinterlace ! ffvideoscale method=2 ! video/​x-raw-yuv,​ width=1024, height=576 ! vp8enc threads=2 quality=6 speed=0 max-latency=25 mode=vbr ! queue ! webmmux name="​mux"​ ! filesink location=einsteins2010.webm ​ demux.current_audio ! queue ! a52dec mode=2 ! vorbisenc quality=0.4 ! queue ! mux.audio_0 
 + 
 +=== Sonstiges === 
 + 
 +   ​gst-launch-0.10 multifilesrc location=big_buck_bunny_%05d.png index=1 caps=”image/​png,​framerate=24/​1″ ! pngdec ! ffmpegcolorspace ! jpegenc quality=100 ! queue ! mux. filesrc location=../​BigBuckBunny-stereo.flac ! flacdec ! audioconvert ! audioresample ! queue ! mux. avimux name=mux ! filesink location=input226_mjpeg.avi 
 + 
 +   ​gst-launch-0.10 v4l2src device=/​dev/​video0 ! tee name=videoout ! queue ! video/​x-raw-yuv,​width=640,​height=480 ! queue  ! theoraenc quality=30 ! muxout. osssrc device=/​dev/​dsp ! tee name=audioout ! queue ! audio/​x-raw-int,​rate=44000 ! queue ! audioconvert ! vorbisenc !  muxout. oggmux name=muxout ! filesink location=media2.ogg videoout. ! queue ! ffmpegcolorspace ! xvimagesink audioout. ! queue ! osssink 
 + 
 +http://​diracvideo.org/​wiki/​index.php/​Encode_Big_Buck_Bunny 
 + 
 +   ​gst-launch-0.10 v4l2src device="/​dev/​video1"​ ! image/​jpeg,​width=640,​height=480,​framerate=30/​1 ! jpegdec ! queue max-size-time="​500000"​ name=input1 v4l2src device="/​dev/​video0"​ ! image/​jpeg,​width=640,​height=480,​framerate=30/​1 ! jpegdec ! queue name=input2 max-size-time="​500000"​ ximagesrc use-damage=false ! ffvideoscale ! video/​x-raw-yuv,​width=1280 ! queue name=input3 max-size-time="​500000"​ input1. ! videomixer2 name=mix sink_0::​xpos=0 sink_1::​xpos=640 ! queue name=asd1 max-size-time="​500000"​ input2. ! mix. input3. ! ffmpegcolorspace ! finalmix. ​ asd1. ! videomixer2 name=finalmix sink_0::​ypos=480 sink_1::​xpos=0 ! queue max-size-time="​500000"​ ! ffmpegcolorspace ! videorate ! video/​x-raw-yuv,​framerate=30/​1 ! x264enc speed-preset="​superfast"​ bitrate=4000 profile=3 tune="​zerolatency"​ ! gdppay ! queue max-size-time="​500000"​ ! tcpserversink host="​10.10.1.58"​ 
 +    
 +   ​gst-launch-0.10 v4l2src device="/​dev/​video1"​ ! image/​jpeg,​width=640,​height=480,​framerate=15/​1 ! jpegdec ! videobox right=-640 ! queue max-size-time="​500000"​ name=webcam1 v4l2src device="/​dev/​video2"​ ! image/​jpeg,​width=640,​height=480,​framerate=15/​1 ! jpegdec ! queue name=webcam2 max-size-time="​500000"​ ximagesrc use-damage=false ! ffvideoscale ! video/​x-raw-yuv,​width=1280 ! queue name=desktop max-size-time="​500000"​ webcam1. ! videomixer name=webcammix sink_0::​xpos=0 sink_1::​xpos=640 ! queue name=webcams max-size-time="​500000"​ webcam2. ! webcammix. ​ webcams. ! videobox bottom=-800 border-alpha=0 fill=white ! videomixer name=finalmix sink_1::​ypos=800 sink_0::​xpos=0 ​ ! queue max-size-time="​500000"​ ! ffmpegcolorspace ! videorate ! video/​x-raw-yuv,​framerate=15/​1 ! x264enc speed-preset="​superfast"​ bitrate=2000 profile=3 tune="​zerolatency"​ ! gdppay ! queue max-size-time="​500000"​ ! tcpserversink host="​0.0.0.0"​ desktop. ! ffmpegcolorspace ! finalmix. pulsesrc device="​alsa_input.usb-046d_0821_F4E863A0-00-U0x46d0x821.analog-stereo"​ provide-clock=false ! audioconvert ! vorbisenc ! gdppay ! queue max-size-time="​500000"​ ! tcpserversink host="​0.0.0.0" port=4954 
gstreamer.txt · Last modified: 2012/02/18 13:29 by brot
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0