old-www/HOWTO/VCR-HOWTO-3.html

708 lines
11 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<TITLE>VCR-HOWTO - Using your GNU/Linux computer as a VCR: Implementation</TITLE>
<LINK HREF="VCR-HOWTO-4.html" REL=next>
<LINK HREF="VCR-HOWTO-2.html" REL=previous>
<LINK HREF="VCR-HOWTO.html#toc3" REL=contents>
</HEAD>
<BODY>
<A HREF="VCR-HOWTO-4.html">Next</A>
<A HREF="VCR-HOWTO-2.html">Previous</A>
<A HREF="VCR-HOWTO.html#toc3">Contents</A>
<HR>
<H2><A NAME="s3">3. Implementation</A></H2>
<P>
<!--
VCRHOWTO!implementation
-->
Now lets go through the steps of actually configuring your computer as a VCR.
<P>
<H2><A NAME="ss3.1">3.1 Install and Configure Tuner Card</A>
</H2>
<P>My particular tuner card required special parameters to the 'tuner' and
'bttv' modules because it was an older model and wasn't properly auto-detected.
If you can watch TV through your card via xawtv, then you have correctly
configured your card. Here are the configuration lines from my /etc/modules.conf
(or /etc/conf.modules for older distributions).
<PRE>
options -k bttv radio=1 card=2
options -k tuner debug=0 type=6
</PRE>
These parameters will vary depending on the model of your card, see the documentation
found in the linux source (linux/Documentation/video4linux) to figure out exactly
how to configure your card. I added these modules to /etc/modules so they would
automatically load on bootup. You can also manually load them with 'modprobe modulename'
as root. I'm currently using the 2.4.2 kernel, but I have had success with this
card with all of the 2.2.x kernels as well. Hint: the user may need to have
ownership of the /dev/video /dev/video0 files (and maybe other devices as well)
before the tuner card will function. As always, I suggest not running any apps
as root.
<P>
<H2><A NAME="ss3.2">3.2 Configure xawtv to function properly.</A>
</H2>
<P>You can either use xawtv from a reasonably current distribution, or download
the source code from the
<A HREF="http://www.strusel007.de/linux/xawtv/">xawtv Homepage</A>
Make sure xawtv functions for your tuner card before proceeding.
<P>
<H3>Sample .xawtv configuration file.</H3>
<P>Here is a sample ".xawtv" configuration file. This should be placed within the
home directory for the user who will be doing the VCR recording. I suggest adding
presets to your .xawtv file for all channels(0-NNN) (even non-existing ones) because you
will use the "v4lctl" command to switch channels later. This command makes use
of 'preset number' rather than 'channel number', so it's convenient to have preset
numbers be the same as actual channel numbers. The following configuration file
was designed for US-cable, your mileage may vary.
<PRE>
[global]
freqtab = us-cable
pixsize = 128 x 96
pixcols = 1
jpeg-quality = 75
mjpeg-quality = 75
toggle-mouse = 0
keypad-ntsc = no
osd = yes
# [Station name]
# capture = overlay | grabdisplay | on | off
# input = Television | Composite1 | S-Video | ...
# norm = PAL | NTSC | SECAM | ...
# channel = #
# fine = # (-128..+127)
# key = keysym | modifier+keysym
# color = #
# bright = #
# hue = #
# contrast = #
[defaults]
norm = NTSC
capture = over
input = Television
[CH0 0]
channel = 0
fine = 0
[CH1 1]
channel = 1
fine = 0
[CH2 2]
channel = 2
fine = 0
[CH3 3]
channel = 3
fine = 0
[CH4 4]
channel = 4
fine = 0
[CH5 5]
channel = 5
fine = 0
[CH6 6]
channel = 6
fine = 0
[CH7 7]
channel = 7
fine = 0
[CH8 8]
channel = 8
fine = 0
[CH9 9]
channel = 9
fine = 0
[CH10 10]
channel = 10
fine = 0
[CH11 11]
channel = 11
fine = 0
[CH12 12]
channel = 12
fine = 0
[CH13 13]
channel = 13
fine = 0
[CH14 14]
channel = 14
fine = 0
[CH15 15]
channel = 15
fine = 0
[CH16 16]
channel = 16
fine = 0
[CH17 17]
channel = 17
fine = 0
[CH18 18]
channel = 18
fine = 0
[CH19 19]
channel = 19
fine = 0
[CH20 20]
channel = 20
fine = 0
[CH21 21]
channel = 21
fine = 0
[CH22 22]
channel = 22
fine = 0
[CH23 23]
channel = 23
fine = 0
[CH24 24]
channel = 24
fine = 0
[CH25 25]
channel = 25
fine = 0
[CH26 26]
channel = 26
fine = 0
[CH27 27]
channel = 27
fine = 0
[CH28 28]
channel = 28
fine = 0
[CH29 29]
channel = 29
fine = 0
[CH30 30]
channel = 30
fine = 0
[CH31 31]
channel = 31
fine = 0
[CH32 32]
channel = 32
fine = 0
[CH33 33]
channel = 33
fine = 0
[CH34 34]
channel = 34
fine = 0
[CH35 35]
channel = 35
fine = 0
[CH36 36]
channel = 36
fine = 0
[CH37 37]
channel = 37
fine = 0
[CH38 38]
channel = 38
fine = 0
[CH39 39]
channel = 39
fine = 0
[CH40 40]
channel = 40
fine = 0
[CH41 41]
channel = 41
fine = 0
[CH42 42]
channel = 42
fine = 0
[CH43 43]
channel = 43
fine = 0
[CH44 44]
channel = 44
fine = 0
[CH45 45]
channel = 45
fine = 0
[CH46 46]
channel = 46
fine = 0
[CH47 47]
channel = 47
fine = 0
[CH48 48]
channel = 48
fine = 0
[CH49 49]
channel = 49
fine = 0
[CH50 50]
channel = 50
fine = 0
[CH51 51]
channel = 51
fine = 0
[CH52 52]
channel = 52
fine = 0
[CH53 53]
channel = 53
fine = 0
[CH54 54]
channel = 54
fine = 0
[CH55 55]
channel = 55
fine = 0
[CH56 56]
channel = 56
fine = 0
[CH57 57]
channel = 57
fine = 0
[CH58 58]
channel = 58
fine = 0
[CH59 59]
channel = 59
fine = 0
</PRE>
<P>
<P>
<H2><A NAME="ss3.3">3.3 Install the avifile library</A>
</H2>
<P>Download the latest avifile package from
<A HREF="http://divx.euro.ru">DiVX :-) Homepage</A>.
You will need avifile-0.5x and binaries-xxxxxx.zip. You should extract the binaries to
/usr/lib/win32. The next section describes compiling and installing avifile-0.53-5.
<P>
<P>
<H3>Compiling and installing avifile-0.53-5</H3>
<P>
<PRE>
# tar xvfz avifile-0.53-5.tar.gz
# cd avifile-0.53-5
# ./configure
# make
# make install
# mkdir /usr/lib/win32
# cd /usr/lib/win32
# unzip /path/to/binaries-010122.zip
</PRE>
You will need to be root for the make install step to work.
If you receive any errors, they were probably due to a missing dependency during
the configure step. Resolve any dependencies and try again. This should work
smoothly on any recent distribution that was installed with 'development' tools.
<P>
<P>
<H2><A NAME="ss3.4">3.4 Installing the VCR frame-grabber program</A>
</H2>
<P>You can get the latest vcr program (vcr-1.07 at the time I wrote this) from
<A HREF="http://www.stack.nl/~brama/vcr/">The VCR Homepage</A>.
<P>
<P>
<H3>Compiling and installing vcr-1.07</H3>
<P>You will need to be root for the make install step to work.
<PRE>
# tar xvfz vcr-1.07.tar.gz
# cd vcr-1.07
# ./configure
# make
# make install
</PRE>
<P>
<H3>Sample .vcrrc configuration file</H3>
<P>By default, vcr installs everything into /usr/local (unless you changed the
prefix on the ./configure line). You can now read the man page for
vcr with: 'man -M/usr/local/man vcr'. This is where I got the initial
.vcrrc file. I configured this one for my needs and added the same presets
to this file as I did with the .xawtv file. If you think these files look
similar, it's because vcr was originally based on the xawtv code base.
Here is the .vcrrc I use: (note that the new 'audiobitrate' parameter means
record audio in mp3 format at the specified bitrate. mp3 audio is MUCH! smaller
than PCM audio that vcr records by default. 30 minutes = 113 megs for mp3 instead
of 240megs for PCM!).
<P>
<PRE>
[defaults]
quality = 95
keyframes = 15
codec = DivX ;-) low-motion
attributes = BitRate=1600
source = Television
norm = ntsc
verbose = 1
freqtab = us-cable
audiofrequency=44
audiobitrate=64
resolution=384
framerate = 29.97
grabdevice=/dev/video0
[CH0 0]
channel = 0
fine = 0
[CH1 1]
channel = 1
fine = 0
[CH2 2]
channel = 2
fine = 0
[CH3 3]
channel = 3
fine = 0
[CH4 4]
channel = 4
fine = 0
[CH5 5]
channel = 5
fine = 0
[CH6 6]
channel = 6
fine = 0
[CH7 7]
channel = 7
fine = 0
[CH8 8]
channel = 8
fine = 0
[CH9 9]
channel = 9
fine = 0
[CH10 10]
channel = 10
fine = 0
[CH11 11]
channel = 11
fine = 0
[CH12 12]
channel = 12
fine = 0
[CH13 13]
channel = 13
fine = 0
[CH14 14]
channel = 14
fine = 0
[CH15 15]
channel = 15
fine = 0
[CH16 16]
channel = 16
fine = 0
[CH17 17]
channel = 17
fine = 0
[CH18 18]
channel = 18
fine = 0
[CH19 19]
channel = 19
fine = 0
[CH20 20]
channel = 20
fine = 0
[CH21 21]
channel = 21
fine = 0
[CH22 22]
channel = 22
fine = 0
[CH23 23]
channel = 23
fine = 0
[CH24 24]
channel = 24
fine = 0
[CH25 25]
channel = 25
fine = 0
[CH26 26]
channel = 26
fine = 0
[CH27 27]
channel = 27
fine = 0
[CH28 28]
channel = 28
fine = 0
[CH29 29]
channel = 29
fine = 0
[CH30 30]
channel = 30
fine = 0
[CH31 31]
channel = 31
fine = 0
[CH32 32]
channel = 32
fine = 0
[CH33 33]
channel = 33
fine = 0
[CH34 34]
channel = 34
fine = 0
[CH35 35]
channel = 35
fine = 0
[CH36 36]
channel = 36
fine = 0
[CH37 37]
channel = 37
fine = 0
[CH38 38]
channel = 38
fine = 0
[CH39 39]
channel = 39
fine = 0
[CH40 40]
channel = 40
fine = 0
[CH41 41]
channel = 41
fine = 0
[CH42 42]
channel = 42
fine = 0
[CH43 43]
channel = 43
fine = 0
[CH44 44]
channel = 44
fine = 0
[CH45 45]
channel = 45
fine = 0
[CH46 46]
channel = 46
fine = 0
[CH47 47]
channel = 47
fine = 0
[CH48 48]
channel = 48
fine = 0
[CH49 49]
channel = 49
fine = 0
[CH50 50]
channel = 50
fine = 0
[CH51 51]
channel = 51
fine = 0
[CH52 52]
channel = 52
fine = 0
[CH53 53]
channel = 53
fine = 0
[CH54 54]
channel = 54
fine = 0
[CH55 55]
channel = 55
fine = 0
[CH56 56]
channel = 56
fine = 0
[CH57 57]
channel = 57
fine = 0
[CH58 58]
channel = 58
fine = 0
[CH59 59]
channel = 59
fine = 0
</PRE>
<P>
<H2><A NAME="ss3.5">3.5 Using cron to record your favorite program.</A>
</H2>
<P>You may want to verify vcr will record your program before setting up cron to
record your programs. You can test this by doing "vcr -t 2m test.avi", then
try to play back that two-minute sample using aviplay. Note that you will need to add
'/usr/local/bin' to your path and '/usr/local/lib' to your ld library path for this
to work properly. It was also suggested that you can use 'at' to record your
program as well, this may be useful for times when you just want to record a
program once at a specific time, but not regularly. Here is a sample shell
script that can be called from cron:
<P>
<H3>Sample cron shell script</H3>
<P>This is a very simple script that merely switches to a channel and records
sixty minutes of a program to a date oriented filename. Place this in $HOME/bin
of the user who will actually do the recording - since I am going to run it at
6pm, I'll call it recordshow6pm.sh.
<P>
<PRE>
#!/bin/sh
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
PATH=/usr/local/bin:$PATH
export PATH
DATE=`date +%m%d%y`
FILENAME=/path/to/myshow-6pm-$DATE.avi
v4lctl setstation 3
vcr -t 60m $FILENAME
</PRE>
<P>
<H3>Calling the script from cron</H3>
<P>Now it's time to call it from cron, monday through friday at 6pm. To do this,
run the crontab -e command as the correct user and enter the following line:
<PRE>
00 18 * * 1-5 /home/username/bin/recordshow6pm.sh
</PRE>
<P>
<P>
<H3>Calling the script from at</H3>
<P>If you'd rather call the script from at, for one-time execution, you may instead do this:
<PRE>
at -f /home/username/bin/recordshow6pm.sh 18:00
</PRE>
<P>
<P>
<HR>
<A HREF="VCR-HOWTO-4.html">Next</A>
<A HREF="VCR-HOWTO-2.html">Previous</A>
<A HREF="VCR-HOWTO.html#toc3">Contents</A>
</BODY>
</HTML>