#!/bin/sh # eli2mpg # Version: 1.2.0 # Umrechnung einer Quicktime-Schnitt-Protokolldatei (aus glav) # in generisches MPEG2-Format # Benötigt: mjpeg-tools, toolame, time # Name des Skriptes: PROG=`basename $0` ELISUFFIX=eli LOGSUFFIX=log AUDIOSUFFIX=mp2 VIDEOSUFFIX=m2v ENDSUFFIX=mpg # zwei oder drei Paramter übergeben? if [ $# -ne 2 ]; then echo echo "Benutzung: $PROG " echo echo " Editier-Protokolldatei von glav" echo echo Mögliche Verfahren: echo -e "vhs\t Quelle: VHS-Kassette. Wird entrauscht" echo -e "dvb\t Quelle: Digitalfernsehen" echo -e "schnell\t schneller statt besser" echo echo "Im aktuellen Verzeichnis werden folgende Dateien erzeugt:" echo -e "$PROG...$LOGSUFFIX \t Logdatei" echo -e "$PROG...$AUDIOSUFFIX \t MPEG2-Klangrohdaten" echo -e "$PROG...$VIDEOSUFFIX \t MPEG2-Bildrohdaten" echo -e "$PROG...$ENDSUFFIX \t MPEG2-Ergebnisdatei" echo exit 1 fi ELIDATEI=$1 if [ ! -r $ELIDATEI ]; then echo "eli-Datei \"$ELIDATEI\" nicht lesbar" exit 1 fi # vorläufig: ENDPRAEFIX=`basename $ELIDATEI $ELISUFFIX` # endgültig: # Die Audio-Datei unterscheidet sich nicht nicht nach Verfahren/Option dvd AUDIOPRAEFIX=$ENDPRAEFIX TYP=$2 TYP_KORREKT=0 for i in schnell dvb vhs do if [ "$i" = "$TYP" ]; then TYP_KORREKT=1 fi done if [ $TYP_KORREKT -eq 0 ]; then echo "Als Verfahren kann angegeben werden:" echo vhs echo dvb echo schnell exit 1 fi # endgültig: ENDPRAEFIX=$ENDPRAEFIX$TYP. LOGPRAEFIX=$PROG.$ENDPRAEFIX LOGDATEI=$LOGPRAEFIX$LOGSUFFIX AUDIODATEI=$AUDIOPRAEFIX$AUDIOSUFFIX VIDEODATEI=$ENDPRAEFIX$VIDEOSUFFIX ENDDATEI=$ENDPRAEFIX$ENDSUFFIX # Temoräre Logdatei für time, wird nach Gebrauch gelöscht: # $$ = PID TEMP_LOG="/tmp/mpeg2enc_zeit$$.log" ################## # toolame ################## # Umwandlung von wav in das mpeg-2-Klangformat: # MP2-Datei schon vorhanden? Muss dann nicht neu enkodiert werden BESTVERWENDEN=0 if [ -e "$AUDIODATEI" ]; then IOKORREKT=0 while [ $IOKORREKT -eq 0 ]; do echo -n "Audio-Datei \"$AUDIODATEI\" ist bereits vorhanden. Soll die bestehende Datei beibehalten werden (j/n) ? " read x case $x in [jJ] ) IOKORREKT=1 ; BESTVERWENDEN=1 ;; [nN] ) IOKORREKT=1 ;; esac done fi # Logdatei schreiben: echo ---------- toolame ----------------- > $LOGDATEI date >> $LOGDATEI echo >> $LOGDATEI if [ $BESTVERWENDEN -eq 0 ]; then BEFEHL="lav2wav $ELIDATEI | toolame -b 224 -p 2 -s 48 -m s - $AUDIODATEI" echo $BEFEHL >> $LOGDATEI eval $BEFEHL else echo "Bestehende Audio-Datei \"$AUDIODATEI\" wird beibehalten" >> $LOGDATEI fi echo >> $LOGDATEI ##################### # mpeg2enc ##################### BEFEHL="/usr/bin/time --output=$TEMP_LOG \ --format="%E" \ nice -n 17 lav2yuv $ELIDATEI | \ " if [ "$TYP" = "vhs" ]; then BEFEHL="$BEFEHL yuvdenoise | " fi # Grundbefehl für alle Typen: # --format 3 = generisches MPEG-2-Format # --video-norm p = PAL # -frame-rate 3 = 25 Bilder/s # --aspect 2 = 4:3 (default) # -N gibts nicht mehr # --closed-gop geht nicht, muss -c genommen werden BEFEHL="$BEFEHL mpeg2enc \ --format 3 \ --aspect 2 \ --video-norm p \ --frame-rate 3 \ --force-b-b-p\ --video-buffer 500 \ -c \ --output $VIDEODATEI \ " # Typabhängige Parameter: # --video-bitrate 7500 ist default für DVD # --interlace-mode 1 benötigt doppelte Zeit . Wenn VHS mit yuvdenoise -F schon deinterlaced wurde, kann hier -I 0 gesetzt werden. # Da sowohl dvb-t als auch vhs interlaced Siganle sind, sollte auch interlaced # abgespeichert werden, da sonst Informationen verloren gehen. # Interlaced Material ist nur auf TV-Gerät anzuschauen, am PC sind Streifen zu sehen. # q2 oder q4 macht keinen Zeitunterschied aus, q2-Datei ist aber 50% größer als q4 # Quantisation(q) kleiner als 4 ist extrem und soll laut mjpegtools-Doku nicht verwendet werden if [ $TYP = "schnell" ]; then PARAMETER=" \ --video-bitrate 7500 \ --quantisation 7 \ " elif [ $TYP = "dvb" ]; then PARAMETER=" \ --video-bitrate 9000 \ --quantisation 4 \ -I 1 \ --reduction-2x2 1 \ --reduction-4x4 1 \ --keep-hf \ " elif [ $TYP = "vhs" ]; then PARAMETER=" \ --video-bitrate 9000 \ --quantisation 4 \ -I 1 \ --reduction-2x2 1 \ --reduction-4x4 1 \ " else echo Kein gültiger Typ angegeben. exit 1 fi BEFEHL="$BEFEHL $PARAMETER \ 2>&1 > /dev/null | \ tee --append $LOGDATEI \ " # 2>&1 > /dev/null | tee --append $LOGDATEI bedeutet, nur stderr loggen # Befehl in Logdatei schreiben: echo ---------- mpeg2enc ---------------- >> $LOGDATEI date >> $LOGDATEI echo >> $LOGDATEI echo -e "$BEFEHL" >> $LOGDATEI echo >> $LOGDATEI # Befehl ausführen eval $BEFEHL echo "------ mpeg2enc-Zeit ----------------" >> $LOGDATEI cat $TEMP_LOG >> $LOGDATEI echo >> $LOGDATEI rm $TEMP_LOG echo =============================================== echo mplex echo =============================================== ############## # mplex ############## # Parameter --mux-limit beschränkt mplex auf Sekunden Dauer BEFEHL="mplex \ --verbose 1 \ -V \ -b 500 \ --format 3 \ --output $ENDDATEI \ $VIDEODATEI \ $AUDIODATEI \ " # -V = variable Bitbreite # -b = buffer size # Befehl in Logdatei schreiben: echo ---------- mplex ---------------- >> $LOGDATEI date >> $LOGDATEI echo >> $LOGDATEI echo "$BEFEHL" >> $LOGDATEI echo >> $LOGDATEI # Befehl ausführen: $BEFEHL