708 lines
11 KiB
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>
|