Difference between revisions of "V4L capture script"

From LinuxTVWiki
Jump to: navigation, search
m
m (Reverted edits by VxlPed (Talk); changed back to last version by Js)
Line 36: Line 36:
 
DVDy=576
 
DVDy=576
 
DVDxy=$DVDx"x"$DVDy
 
DVDxy=$DVDx"x"$DVDy
# 5000   192 = 5192kbit/s = 38,1 MB/Min.
+
# 5000 + 192 = 5192kbit/s = 38,1 MB/Min.
  
 
HuffYUVx=768
 
HuffYUVx=768
 
HuffYUVy=576
 
HuffYUVy=576
 
HuffYUVxy=$HuffYUVx"x"$HuffYUVy
 
HuffYUVxy=$HuffYUVx"x"$HuffYUVy
# 768x576   MP2 = 650 MB/Min.
+
# 768x576 + MP2 = 650 MB/Min.
  
 
MPEG4x=576
 
MPEG4x=576
Line 47: Line 47:
 
MPEG4xy=$MPEG4x"x"$MPEG4y
 
MPEG4xy=$MPEG4x"x"$MPEG4y
 
MPEG4bitrate=1200
 
MPEG4bitrate=1200
# 1200 128=1328kbit/s=9,8 MB/Min.
+
# 1200+128=1328kbit/s=9,8 MB/Min.
# 1500 128=1628kbit/s=12,0 MB/Min.
+
# 1500+128=1628kbit/s=12,0 MB/Min.
# 1800 128=1928kbit/s=14,2 MB/Min.
+
# 1800+128=1928kbit/s=14,2 MB/Min.
  
 
x264x=384
 
x264x=384
Line 129: Line 129:
 
read x
 
read x
  
STARTZEIT=$(date %Y.%m.%d_%H:%M)
+
STARTZEIT=$(date +%Y.%m.%d_%H:%M)
  
 
DATEI=$NAME"."$STARTZEIT"."$AUFLOESUNG$DI"."$CODECS
 
DATEI=$NAME"."$STARTZEIT"."$AUFLOESUNG$DI"."$CODECS

Revision as of 18:43, 19 June 2007

Introduction

An updated version of this script may be available at fernmelding.de.

The capture script

This script lets you encode to raw video, mpeg4, or H.264 according to your needs.


#!/bin/sh

# Name:    capture
PROG_VERSION="0.9.8"
# Datum:   15.03.2006

# Analoge Video-Aufzeichnung von Video4Linux-TV-Karte

# Benoetigt: mencoder
# Empfohlen: GNU time

# Quelle: http://www.fernmeldung.de/capture/

echo "---------------------------------------------------------------"
echo "capture $PROG_VERSION (http://www.fernmeldung.de/capture)"
echo "Aufzeichnung von analoger Video4Linux-TV-Karte"
echo "---------------------------------------------------------------"
echo "Winke fuer eine erfolgreiche Aufzeichnung:"
echo "- ntp-Daemonen u.ae. Zeitverstell-Programme beenden, da sonst"
echo "  Sync-Probleme auftreten koennten"
echo "- Audio-Eingang (igain) auf 70 einstellen"
echo "- Ggf. Audio-Pegel der Quelle (z.B. DVB-Empfaenger) einstellen"
echo "---------------------------------------------------------------"

DVDx=720
DVDy=576
DVDxy=$DVDx"x"$DVDy
# 5000 + 192 = 5192kbit/s = 38,1 MB/Min.

HuffYUVx=768
HuffYUVy=576
HuffYUVxy=$HuffYUVx"x"$HuffYUVy
# 768x576 + MP2 = 650 MB/Min.

MPEG4x=576
MPEG4y=432
MPEG4xy=$MPEG4x"x"$MPEG4y
MPEG4bitrate=1200
# 1200+128=1328kbit/s=9,8 MB/Min.
# 1500+128=1628kbit/s=12,0 MB/Min.
# 1800+128=1928kbit/s=14,2 MB/Min.

x264x=384
x264y=288
x264xy=$x264x"x"$x264y

# Temp-Datei fuer time-Ausgabe:
# $$ = PID
TEMP_DATEI="/tmp/capture_time.$$.tmp"

echo -n "Name der Aufzeichnung [aufzeichnung]: "
read NAME

# NAME leer (zero) ?
if [ -z $NAME ]; then
	NAME="aufzeichnung"
fi

# Bei Audio-Aufzeichnungsproblemen kann evtl. ein angehaengtes :forceaudio helfen
BEFEHL="mencoder tv:// -tv driver=v4l:norm=pal:input=1:fps=25:audiorate=48000"

echo -n "Format (d=DVD-"$DVDxy", h=HuffYUV-"$HuffYUVxy", x=x264-"$x264xy") [MPEG4-"$MPEG4xy"]: "
read FORMAT

case $FORMAT in 
	d)	echo "Format: DVD / AC3 / "$DVDxy" (etwa 40 MB/Min.)"
		AUFLOESUNG=$DVDxy
		CODECS="DVD_AC3"
		BEFEHL=$BEFEHL":width="$DVDx":height="$DVDy" -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=8000:vbitrate=5000:keyint=15:acodec=ac3:abitrate=192:aspect=4/3"
		# (see mplayer homepage for encoding examples)
		;;

	h)	echo "Format: HuffYUV / MP2 / "$HuffYUVxy" (etwa 650 MB/Min.)"
		AUFLOESUNG=$HuffYUVxy
		CODECS="HuffYUV_MP2"
		BEFEHL=$BEFEHL":width="$HuffYUVx":height="$HuffYUVy" -oac lavc -ovc lavc -lavcopts vcodec=huffyuv:format=422p:acodec=mp2:abitrate=224"
		;;

	x)	echo "Format: X264 / MP3 / $x264xy"
		AUFLOESUNG=$x264xy
		CODECS="x264_MP3"
		BEFEHL=$BEFEHL":width="$x264x":height="$x264y" -ovc x264 -x264encopts bitrate=1000 -oac lavc -lavcopts acodec=mp2"
		# vhq=1..4
		;;

	*)	echo "Format: MPEG4 / MP3 / $MPEG4xy / $MPEG4bitrate kbit/s (9,8 MB/Min.)"
		AUFLOESUNG=$MPEG4xy
		CODECS="FMP4_MP3"
		BEFEHL=$BEFEHL":width="$MPEG4x":height="$MPEG4y" -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:vbitrate="$MPEG4bitrate" -ffourcc XVID -oac mp3lame -lameopts cbr:br=128"
		;;
esac

echo -n "Deinterlacing (n=nein) [ja] ? "
read DI
if [ "$DI" != "n" ]; then
	echo "Deinterlacing: ja"
	DI=".deinterlaced"
	BEFEHL="$BEFEHL -vf pp=lb"
else
	echo "Deinterlacing: nein"
	DI=""
fi

echo -n "Maximale Aufnahmedauer ([[hh:]mm:]ss) [unbegrenzt]: "
read DAUERMAX
if [ $DAUERMAX ]; then
	echo "Aufnahmedauer: $DAUERMAX"
	BEFEHL="$BEFEHL -endpos $DAUERMAX"
else
	echo "Aufnahmedauer: unbegrenzt"
fi

echo "--------------------------------------------------------------"
echo "Fuehre aus: $BEFEHL"
echo "--------------------------------------------------------------"
echo "Die Aufzeichnung kann mit <Strg>-C korrekt beendet werden."
echo "Eingabe-Taste druecken, um mit der Aufzeichnung zu beginnen"
echo "<Strg>-C zum Abbruch"
read x

STARTZEIT=$(date +%Y.%m.%d_%H:%M)

DATEI=$NAME"."$STARTZEIT"."$AUFLOESUNG$DI"."$CODECS

BEFEHL="$BEFEHL -o $DATEI"

# Wo ist GNU time ?
TIMEBEFEHL=$(which time)

if [ $TIMEBEFEHL -a -x $TIMEBEFEHL ]; then

	# quiet=keine Abbruchmeldung format %e = Realsekunden -o Ausgabedatei
	$TIMEBEFEHL -o $TEMP_DATEI --quiet --format %e $BEFEHL

	DAUERsec=$(cat $TEMP_DATEI)
	rm $TEMP_DATEI

	# Loeschen aller Zeichen vom Zeilenende bis zu einem Punkt 
	# und des Punktes selbst (also eine ganze Zahl machen):
	DAUERsec=${DAUERsec%.*}

	if [ $DAUERsec -lt 60 ]; then
		DAUER=${DAUERsec}sec
	else
		DAUERmin=$[$DAUERsec/60]
		DAUER=${DAUERmin}min
	fi

	ENDDATEI=$DATEI"."$DAUER".avi"
else
	$BEFEHL
	ENDDATEI=$DATEI".avi"
	echo
        echo "Hinweis: Konnte die Aufnahmedauer nicht ermitteln und dem Dateinamen zufuegen, da das Programm \"time\" nicht ausfuehrbar ist (Achtung: Es wird die Programmdatei time (GNU time) benoetigt, kein Shell-interner time-Befehl; pruefen mit \"which time\")."
	echo "Falls gewuenscht, \"time\" ausfuehrbar machen."
        echo
fi

mv $DATEI $ENDDATEI

echo "------------------------------------------------------"
echo "Datei: $ENDDATEI"
echo "------------------------------------------------------"