TV input
This section is about how to enable watching/grabbing
from V4L compatible TV tuner. See the man page for a description
of TV options and keyboard controls.
Compilation
First, you have to recompile. ./configure will
autodetect kernel headers of v4l stuff and the existence of
/dev/video* entries. If they exist, TV support will
be built (see the output of ./configure).
Make sure your tuner works with another TV software in Linux, for
example XawTV.
Usage tips
The full listing of the options is available on the manual page.
Here are just a few tips:
Use the option. An example:
-tv channels=26-MTV1,23-TV2
Explanation: using this option, only the 26 and 23 channels will be usable,
and there will be a nice OSD text upon channel switching, displaying the
channel's name. Spaces in the channel name must be replaced by the
"_" character.
Choose some sane image dimensions. The dimensions of the resulting image should
be divisible by 16.
If you capture the video with the vertical resolution higher than half of
the full resolution (i.e. 288 for PAL or 240 for NTSC), make sure you turned
deinterlacing on. Otherwise you'll get a movie which is distorted during
fast-motion scenes and the bitrate controller will be probably even unable
to retain the specified bitrate as the interlacing artifacts produce high
amount of detail and thus consume lot of bandwidth. You can enable
deinterlacing with . Usually
does a good job, but it can be matter of personal
preference. See other deinterlacing algorithms in the manual and give it a try.
Crop out the dead space. When you capture the video, the areas at the edges
are usually black or contain some noise. These again consume lots of
unnecessary bandwidth. More precisely it's not the black areas themselves
but the sharp transitions between the black and the brighter video image
which do but that's not important for now. Before you start capturing,
adjust the arguments of the option so that all the
crap at the margins is cropped out. Again, don't forget to keep the resulting
dimensions sane.
Watch out for CPU load. It shouldn't cross the 90% boundary for most of the
time. If you have a large capture buffer, MEncoder
can survive an overload for few seconds but nothing more. It's better to
turn off the 3D OpenGL screensavers and similar stuff.
Don't mess with the system clock. MEncoder uses the
system clock for doing A/V sync. If you adjust the system clock (especially
backwards in time), MEncoder gets confused and you
will lose frames. This is an important issue if you are hooked to a network
and run some time synchronization software like NTP. You have to turn NTP
off during the capture process if you want to capture reliably.
Don't change the unless you know what you are doing
or your card/driver really doesn't support the default (YV12 colorspace).
In the older versions of MPlayer/
MEncoder it was necessary to specify the output
format. This issue should be fixed in the current releases and
isn't required anymore, and the default suits the most purposes. For example,
if you are capturing into DivX using libavcodec and specify
in order to increase the quality of the captured
images, the captured image will be actually later converted back into YV12 so
the only thing you achieve is a massive waste of CPU power.
To specify the I420 colorspace (), you have to add an
option due to a fourcc conflict with an Intel Indeo
video codec.
There are several ways of capturing audio. You can grab the sound either using
your soundcard via an external cable connection between video card and line-in,
or using the built-in ADC in the bt878 chip. In the latter case, you have to
load the btaudio driver. Read the
linux/Documentation/sound/btaudio file (in the kernel
tree, not MPlayer's) for some instructions on using
this driver.
If MEncoder cannot open the audio device, make
sure that it is really available. There can be some trouble with the sound
servers like arts (KDE) or esd (GNOME). If you have a full duplex soundcard
(almost any decent card supports it today), and you are using KDE, try to
check the "full duplex" option in the sound server preference menu.
Examples
Dummy output, to AAlib :)
mplayer -tv driver=dummy:width=640:height=480 -vo aa tv://
Input from standard V4L:
mplayer -tv driver=v4l:width=640:height=480:outfmt=i420 -vc rawi420 -vo xv tv://
A more sophisticated example. This makes MEncoder
capture the full PAL image, crop the margins, and deinterlace the picture
using a linear blend algorithm. Audio is compressed with a constant bitrate
of 64kbps, using LAME codec. This setup is suitable for capturing movies.
mencoder -tv driver=v4l:width=768:height=576 \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 \
-oac mp3lame -lameopts cbr:br=64 \
-vf crop=720:544:24:16,pp=lb -o output.avi tv://
This will additionally rescale the image to 384x288 and compresses the
video with the bitrate of 350kbps in high quality mode. The vqmax option
looses the quantizer and allows the video compressor to actually reach so
low bitrate even at the expense of the quality. This can be used for
capturing long TV series, where the video quality isn't so important.
mencoder -tv driver=v4l:width=768:height=576 \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=350:vhq:vqmax=31:keyint=300 \
-oac mp3lame -lameopts cbr:br=48 \
-vf crop=720:540:24:18,pp=tn/lb,scale=384:288 -sws 1 -o output.avi tv://
It's also possible to specify smaller image dimensions in the
option and omit the software scaling but this approach uses the maximum available
information and is a little more resistant to noise. The bt8x8 chips can do the
pixel averaging only in the horizontal direction due to a hardware limitation.