GStreamer
Introduction
The gstreamer0.10-plugins-bad package in Debian recently added Video4Linux2 capture support (cf. bug #379867).
Documentation
- Gstreamer project
- FAQ
- Documentation
- Core plugins reference manual
- http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-ffmpeg-plugins/html/ FFMpeg plugins reference manual]
- Base plugins reference manual
- Good plugins reference manual
- Bad plugins reference manual
- Ugly plugins reference manual
- man gst-launch
Webcam commands
gst-launch-0.10 v4l2src use-fixed-fps=false ! video/x-raw-yuv,format=\(fourcc\)UYVY,width=320,height=240 \ ! ffmpegcolorspace ! ximagesink
gst-launch-0.10 v4lsrc autoprobe-fps=false device=/dev/video0 ! "video/x-raw-yuv, width=160, height=120, \ framerate=10, format=(fourcc)I420" ! xvimagesink
TV capture commands
Record to ogg theora
gst-launch-0.10 oggmux name=mux ! filesink location=test0.ogg v4l2src device=/dev/video2 ! \ video/x-raw-yuv,width=640,height=480,framerate=\(fraction\)30000/1001 ! ffmpegcolorspace ! \ theoraenc ! queue ! mux. alsasrc device=hw:2,0 ! audio/x-raw-int,channels=2,rate=32000,depth=16 ! \ audioconvert ! vorbisenc ! mux.
The files will play in mplayer, using the codec Theora or [raw] RAW Uncompressed Video. I was unable to get sound output, though mplayer claimed there was sound -- the video is good quality:
VIDEO: [theo] 640x480 24bpp 29.970 fps 0.0 kbps ( 0.0 kbyte/s) Selected video codec: [theora] vfm: theora (Theora (free, reworked VP3)) AUDIO: 32000 Hz, 2 ch, s16le, 112.0 kbit/10.94% (ratio: 14000->128000) Selected audio codec: [ffvorbis] afm: ffmpeg (FFmpeg Vorbis decoder)
Note the required workaround to get sound on a saa7134 card, which is set at 32000Hz (cf. bug).
Record to mpeg4
Or mpeg4 with an avi container (Debian has disabled ffmpeg encoders, so use example above):
gst-launch-0.10 avimux name=mux ! filesink location=test0.avi v4l2src device=/dev/video2 ! \ video/x-raw-yuv,width=640,height=480,framerate=\(fraction\)30000/1001 ! ffmpegcolorspace ! \ ffenc_mpeg4 ! queue ! mux. alsasrc device=hw:2,0 ! audio/x-raw-int,channels=2,rate=32000,depth=16 ! \ audioconvert ! lame ! mux.
Playing the file back in mplayer, I was unable to get sound output, though mplayer claimed there was sound -- the video is good quality:
VIDEO: [theo] 640x480 24bpp 29.970 fps 0.0 kbps ( 0.0 kbyte/s) Selected video codec: [theora] vfm: theora (Theora (free, reworked VP3)) AUDIO: 32000 Hz, 2 ch, s16le, 112.0 kbit/10.94% (ratio: 14000->128000) Selected audio codec: [ffvorbis] afm: ffmpeg (FFmpeg Vorbis decoder)
=Record to raw video
If you don't care for sound, this simple version works for uncompressed video:
gst-launch-0.10 v4l2src device=/dev/video5 ! video/x-raw-yuv,width=640,height=480 ! avimux ! \ filesink location=test0.avi
tcprobe says this video-only file uses the I420 codec and gives the framerate as correct NTSC:
$ tcprobe -i test1.avi [tcprobe] RIFF data, AVI video [avilib] V: 29.970 fps, codec=I420, frames=315, width=640, height=480 [tcprobe] summary for test1.avi, (*) = not default, 0 = not detected import frame size: -g 640x480 [720x576] (*) frame rate: -f 29.970 [25.000] frc=4 (*) no audio track: use "null" import module for audio length: 315 frames, frame_time=33 msec, duration=0:00:10.510
The files will play in mplayer, using the codec [raw] RAW Uncompressed Video.
Converting formats
To convert the files to matlab (didn't work for me):
mencoder test0.avi -ovc raw -vf format=bgr24 -o test0m.avi -ffourcc none
For details, see gst-launch and google; the plugins in particular are poorly documented so far.