[Index] [TitleIndex] [WordIndex

Leadtek Winfast 2000XP Expert

This page is written for the "Leadtek Winfast 2000XP Expert" card with the audio out connected to the motherboard AUX in, running Ubuntu dapper with ALSA.

Warning: make sure you understand roughly what is going on before using the scripts given below

Watching TV with tvtime

Install tvtime and use the tvtime-scanner command to pick up channels. You might need to check the capture levels and settings on your card (with eg. amixer or alsamixer).

Once tvtime is working and you're happy with volume control you can enable the tvtime module in local_conf.py:


You may have to edit the keymap when using tvtime which is described here and you will need to setup XMLTV as described here.

An example channel list (for Belgian cable) can be seen here.

Recording with mencoder

The main stumbling block with this card and mencoder is making sure you set the brightness, contrast, hue, saturation levels in VCR_CMD and making sure the video mute is off and the capture is correctly on.

The following settings for local_conf.py are for use with AUX in using Belgium PAL. I haven't tested the commands below as I use the scipts instead (see below).

TV_DRIVER = 'v4l2'
TV_DEVICE = '/dev/video0'
TV_REC_SIZE = (768, 576)
AUDIO_DEVICE = 'hw.0,0'

VCR_AUDIO = (':adevice=%s' % AUDIO_DEVICE +
              ':alsa:audiorate=32000' +         # 44100 for better sound

AMIXER = '/usr/bin/amixer'
V4LCTL = '/usr/bin/v4lctl'

# the following numid's can be obtained by running amixer controls

VCR_PRE_REC = ( AMIXER + '-q cset numid=22 off;' + # mute aux so you don't hear via playback
                AMIXER + '-q cset numid=23 90%;' + # set aux vol
                AMIXER + '-q cset numid=26 3;' +   # set capture to aux
                AMIXER + '-q cset numid=27 on;' +  # set capture on
                AMIXER + '-q cset numid=28 90%;' + # set capture volume
                V4LCTL + 'volume mute off' )       # video mute off

VCR_CMD = (CONF.mencoder + ' ' +
            'tv:// ' +                      # New mplayer requires this.
            '-tv driver=%s:input=%d' % (TV_DRIVER, TV_INPUT) +
            ':norm=PAL-BG' +                # For Belgium
            ':channel=%(channel)s' +        # Filled in by Freevo
            ':chanlist=%s' % CONF.chanlist +
            ':width=%d:height=%d' % (TV_REC_SIZE[0], TV_REC_SIZE[1]) +
            ':outfmt=%s' % TV_REC_OUTFMT +
            ':device=%s' % TV_DEVICE +
            ':brightness=53:contrast=26:saturation=50:hue=50' + # the 'trick'
            VCR_AUDIO +                     # set above
            ' -ovc lavc -lavcopts ' +       # Mencoder lavcodec video codec
            'vcodec=mpeg4' +                # lavcodec mpeg-4
            ':vbitrate=3000:' +             # Change lower/higher, bitrate
            ':buffersize=64:' +             # 64mb buffer
            'keyint=30 ' +                  # Keyframe every 10 secs, change?
            '-oac mp3lame -lameopts ' +     # Use Lame for MP3 encoding, must be enabled in mencoder!
            'br=128:cbr:mode=3 ' +          # MP3 const. bitrate, 128 kbit/s
            '-ffourcc divx ' +              # Force 'divx' ident, better compat.
            '-endpos %(seconds)s ' +        # only mencoder uses this so do it here.
            '-o %(filename)s')         # Filled in by Freevo

VCR_POST_REC = ( AMIXER + '-q cset numid=22 on;' + # unmute aux
                V4LCTL + 'volume mute on' )       # video mute on

Passing tvtime channel names to mplayer

The following script is a workaround to the problem that tvtime doesn't use the same channel names as freevo (cf. freq.py). Ie. S11 in tvtime is SE11 in mplayer. A neater solution would be to edit the tvtime plugin to use freq.py then the above could be used.

The problem with running a script that runs mencoder is how to terminate it cleanly. The VCR_POST_REC kill command is vital that mencoder stops and doesn't eat up your disk space.


# tidying up as mencoder doesn't exit automatically with -endpos

clean_up () {
        PID=`pidof mencoder`
        if [[ $PID -gt 0 ]]; then
                kill -SIGINT $PID # kill mencoder neatly
        v4lctl volume mute on                   # silence tv
        amixer -q cset numid=22 on              # unsilence aux

trap clean_up SIGINT SIGTERM SIGHUP # this doesn't work, hence the -c option for VCR_POST_REC

while getopts "c" Option
  case $Option in
    c     ) clean_up;;
shift $(($OPTIND - 1))

# start the script

channel=$1; output=$2

if [ -z $output ]; then
        echo "Usage: record channel filename"
        exit 1

# some settings:

# 2 bodges for converting tvtime channel names into mplayer channel names
# U29 -> 29

# S1-S20 -> SE1-SE20
if [[ ${channel#S} != $channel && ${channel#S} -lt 21 ]]; then

# mencoder options with deinterlace and index building
options="tv:// -tv driver=v4l2:brightness=53:contrast=26:saturation=50:hue=50:adevice=$adevice:forceaudio:audiorate=32000:amode=1:norm=PAL-BG:input=0:chanlist=europe-west:channel=$channel:width=$width:height=$height:outfmt=yuy2:device=/dev/video0:buffersize=64 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=4000:keyint=30 -idx -oac mp3lame -lameopts br=128:cbr:mode=3 -ffourcc divx -vf pp=md/de,phase=U -o $output"

# start the recording process:
# mute aux
amixer -q cset numid=22 off
# set aux vol
amixer -q cset numid=23 90%
# set capture aux
amixer -q cset numid=26 3
# set capture on
amixer -q cset numid=27 on
# set capture volume
amixer -q cset numid=28 90%
# video mute off
v4lctl volume mute off

$mencoder $options

Then edit local_conf.py:

VCR_CMD = ( '/usr/local/bin/record' +
            ' %(channel)s' +
            ' %(filename)s')        # Filled in by Freevo

VCR_POST_REC = ( '/usr/local/bin/record -c') # important!! stop mencoder recording

2014-02-15 05:10