ubuntuusers.de

TV-Skript

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Wiki/Icons/tv2.png Dieses Skript erlaubt es, TV-Aufnahmen komfortabel zu starten. Die Bedienung ist intuitiv zu erfassen. Die GUI fragt alle nötigen Informationen zum Sender, zur Aufnahmedauer und zum Aufnahmestart (mit Kalenderfunkton) sowie zum Titel und Speicherort ab.

Installation

Folgende Pakete müssen installiert [1] sein:

  • mplayer

  • mencoder

  • zenity

Vorbereitung

Um das Skript von stw0815 nutzen zu können, muss man natürlich mit MPlayer DVB-Fernsehen schauen können, es muss also eine channels-conf im Verzeichnis ~/.mplayer vorhanden sein,

In einem Editor [2] fügt man die folgenden Zeilen ein und speichert das Skript unter einem aussagekräftigen Titel, z.B. TV-Aufnahme.sh z.B. in ~/bin/ ab.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
## Author stw0815
## http://forum.ubuntuusers.de/topic/70377/
MCD=/usr/bin/mencoder
zenity --help > /dev/null || { echo "Fehler: Du benötigst \"zenity\" um dieses Script nutzen zu können." && exit 1 ; }
test -e $MCD || { zenity --error --text "Fehler: Du benötigst \"mencoder\" um dieses Script nutzen zu können." && exit 1 ; }
test ! -e ~/.mplayer/channels.conf && zenity --error --text "~/.mplayer/channels.conf wurde nicht gefunden" && exit 1
SENDER=`cat ~/.mplayer/channels.conf | cut -d ":" -f 1 | zenity --list --title "Bitte Sender auswählen" --column "Sender:"` || exit 0
test "$SENDER" || { zenity --error --text "Es wurde kein Sender ausgewählt." && exit 1 ; }
DAUER=`zenity --entry --title "Dauer" --entry-text "60" --text "Bitte die Aufnahmedauer in Minuten eingeben"` || exit 0
LENGTH=$(($DAUER*60*25))
test "$LENGTH" -lt 1 && zenity --error --text "Die Aufnahmedauer ist fehlerhaft." && exit 1
FILE=`zenity --file-selection --save --confirm-overwrite --title "Name und Ort zum Speichern auswählen" --filename="$SENDER".mpg` || exit 0
REC="dvb://\"$SENDER\" -of mpeg -mpegopts format=dvd -ovc copy -oac copy -frames $LENGTH -o \"$FILE\""
zenity --question --text "Soll die Aufnahme sofort gestartet werden?" && eval "$MCD" "$REC" && exit 0
DAY=`zenity --calendar --title "Aufnahmedatum" --text "Bitte das Datum der Aufnahme festlegen"` || exit 0
TIME=`zenity --entry --title "Aufnahmestart (HH:MM)" --text "Bitte den Startzeitpunkt der Aufnahme festlegen" --entry-text "$(date --date="5 minutes" +%H:%M)"` || exit 0
echo "$MCD $REC" | at $TIME $DAY &> /tmp/recerror
test $? -gt 0 && zenity --error --text "$(cat /tmp/recerror)" && rm /tmp/recerror && exit 1
zenity --info --text "Sender: $SENDER\nBeginn: $DAY, $TIME Uhr\nDauer: $DAUER Minuten, $LENGTH Einzelbilder\nDateiname: $FILE\n\nStatus: OK\n$(cat /tmp/recerror)"
test -e /tmp/recerror && rm /tmp/recerror

Die Datei nun ausführbar [3] machen und anschließend starten [4]. Komfortabler ist es das Programm im Menü [5] zu hinterlegen bzw. mit einem Desktop-Icon zu verlinken.

Ein anderes Standardverzeichnis für den Speicherort kann man einfach dadurch erreichen, dass man bei der Zeile "FILE=..." die Variable "--filename" um den Pfad zum gewünschten Verzeichnis erweitert, also beispielsweise "--filename=/home/"USER"/Aufnahmen/"$SENDER".mpg" Der Stream wird als DVD-kompatible MPEG-Datei aufgezeichnet und lässt sich direkt bzw. nach der Aufnahme betrachten oder mit Avidemux bearbeiten.

Benutzung

Im Senderauswahlmenü sind die Sender aufgelistet, die in der Datei channels.conf im Verzeichnis ~/.mplayer eingetragen sind. Ist diese nicht vorhanden, kann sie mit dvb-utils für DVB-fähige Geräte erstellt werden.

Als nächstes wird die Aufnahmelänge in Minuten eingegeben. Es empfiehlt sich immer, die Dauer der Aufnahme etwas länger als die Dauer der Sendung zu wählen. Nach Bestätigung wird folgend nach dem Speicherort und dem Dateinamen gefragt. Dieser heißt standardmäßig SENDER.mpg.

Der Aufnahmestart kann für jeden beliebigen Zeitpunkt festgelegt werden. So kann die Aufnahme im einfachsten Fall direkt beginnen. Alternativ kann eine Uhrzeit und ein Datum für den Aufnahmebeginn eingegeben werden. Wird der Dialog zum sofortigem Aufnahmebeginn abgebrochen (Cancel), wird der Kalender der Oberfläche eingeblendet. Hier muss der Aufnahmetag auswählt werden, ansonsten bricht das Skript vorzeitig ab.

Abschließend wird der Beginn der Aufnahme angegeben. Das Format ist "HH:MM" bzw. "HH.MM", z.B. "17:15" bzw. "17.15" (alternative Zeitangaben finden sich in der Manpage von at). Zu guter Letzt erscheint ein Infofenster mit den Details der programmierten Aufnahme. Neben der Bestätigung, dass der Termin erfolgreich gespeichert ist, findet sich auch die zugehörige Jobnummer.

Es können so beliebig viele Aufnahmetermine erstellt werden. In der Konsole [6] können die programmierten Aufnahmezeitpunkte mit dem Befehl:

atq 

nochmals abgefragt werden. Es wird an erster Stelle immer eine Jobnummer ausgegeben, anhand derer sich die geplante Aufnahme auch wieder löschen lässt. Dazu in der Konsole [6]:

atrm <jobnummer> 

eingeben.

Eine leicht abgewandelte Form des Skripts, welches die Aufnahmen mit dem Dateinamenmuster "Sender-Datum-Uhrzeit".mpg abspeichert, findet sich im Forum. Falls die Dateien auch unter Windows verwendet werden sollen, empfiehlt es sich, bei der Zeitangabe darauf zu achten, keine Doppelpunkte im Dateinamen zu verwenden.

Alternative mit MPlayer und .TS-Format

Wenn es mit den Aufnahmen Probleme (in Form von Asynchronität zwischen Ton und Bild) gibt, kann alternativ dieses Skript verwendet werden, das die Aufnahme im .TS-Format erstellt. Damit sollten keine Bild-Ton-Verschiebungen mehr vorkommen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
## Author stw0815; revised by Heinrich Schwietering
## http://forum.ubuntuusers.de/topic/70377/; http://forum.ubuntuusers.de/topic/155644
MCD=/usr/bin/mplayer
USER=~/Videos
zenity --help > /dev/null || { echo "Fehler: Du benötigst \"zenity\" um dieses Script nutzen zu können." && exit 1 ; }
test -e $MCD || { zenity --error --text "Fehler: Du benötigst \"mplayer\" um dieses Script nutzen zu können." && exit 1 ; }
test ! -e ~/.mplayer/channels.conf && zenity --error --text "~/.mplayer/channels.conf wurde nicht gefunden" && exit 1
SENDER=`cat ~/.mplayer/channels.conf | cut -d ":" -f 1 | zenity --list --title "Bitte Sender auswählen" --column "Sender:"` || exit 0
test "$SENDER" || { zenity --error --text "Es wurde kein Sender ausgewählt." && exit 1 ; }
DAY=`zenity --calendar --title "Aufnahmedatum" --text "Bitte das Datum der Aufnahme festlegen"` || exit 0
TIME=`zenity --entry --title "Aufnahmestart (HH.MM)" --text "Bitte den Startzeitpunkt der Aufnahme festlegen" --entry-text "$(date --date="30 seconds" +%H.%M)"` || exit 0
END=`zenity --entry --title="Endzeit" --entry-text="20.00" --text="Endzeit im Format HH.MM eingeben."`
DAY2=`zenity --calendar --title "Ende der Aufnahme" --text "Wichtig: Bitte den Folgetag angeben, falls die Aufnahmezeit über Mitternacht hinaus geht"` || exit 0
FILE=`zenity --file-selection --save --confirm-overwrite --title "Name und Ort zum Speichern auswählen" --filename=/"$USER"/"$SENDER"-"$DAY"-"$TIME"-"$END".TS` || exit 0
REC="dvb://\"$SENDER\" -dumpstream -dumpfile \"$FILE\""
echo "$MCD $REC" | at $TIME $DAY &> /tmp/recerror
test $? -gt 0 && zenity --error --text "$(cat /tmp/recerror)" && rm /tmp/recerror && exit 1
echo "killall $MCD" | at $END $DAY2 &> /tmp/recerror1
test $? -gt 0 && zenity --error --text "$(cat /tmp/recerror1)" && rm /tmp/recerror1 && exit 1
zenity --info --text "Sender: $SENDER\nBeginn: $DAY, $TIME Uhr\nEnde: $DAY2, $END Uhr, Dateiname: $FILE\n\nStatus: OK\n$(cat /tmp/recerror)\n$(cat /tmp/recerror1)\n\nTermin mit \"atq\" im Terminal überprüfbar;\nmit \"atrm 'jobnr'\" löschbar!"
test -e /tmp/recerror && rm /tmp/recerror
test -e /tmp/recerror1 && rm /tmp/recerror1

Das Skript herunterladen, abspeichern (ggf. die Zeile 5 "USER=~/Videos" zum Speicherort den eigenen Wünschen anpassen, standardmäßig wird in /home/"user"/Videos abgespeichert) und ausführbar machen. In diesem Skript wird statt MEncoder das Programm MPlayer zum Encodieren und Speichern verwendet, der Stream wird .TS-Format (Transport Stream) abgespeichert

Die Bedienung ist ähnlich einfach. Ggf. gibt es beim Ausführen Fehlermeldung wegen unzulänglicher utf-Kodierungen in Pango, das hat aber keinen Einfluss auf die Gebrauchsfähigkeit des Skriptes. Probleme gibt es allenfalls mit Umlauten in Sendernamen; die sollte man dann in der channels.conf entfernen.

Die Startzeit für die "Sofort-Aufnahme" ist um 30 Sekunden verzögert, damit genügend Zeit bleibt, das Ende der Aufnahme anzugeben - sonst kommt es ggf. zu Meldungen, dass at-Jobs, die in der Vergangenheit liegen, nicht angenommen werden können, oder die Ausführung des Jobs wird gleich auf den nächstfolgenden Tag verschoben. Eine leicht abgewandelte Version, bei der statt des Endzeitpunkts/Tages nur die Länge der Aufnahme in Minuten angegeben werden muss, findet sich im Forum.

Konvertierung des .TS-Format in herkömmliche MPEG2 Programm Streams

Verarbeitet man die per MPlayer aufgenommenen TS-Dateien in reinem Streamcopy zum Beispiel mit AVIDemux, so sind die resultierenden Dateien in Bild und Ton häufig asynchron. Für rein MPEG2-basierte Aufnahmen (DVB-S / DVB-T / DVB-C) kann es helfen die TS-Dateien vor dem Schneiden in MPEG2-Dateien zu konvertieren. Dies funktioniert sehr einfach mit diesem Shellskript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
# Parameter 1: TS file
# Konvertiert DVB-T Transport Stream zu MPEG2 und beseitigt A/V Asynchronität
# Benötigt installiertes project-x und mplex

DIR=$(dirname $1)
FILENAME=$(basename $1)
NAME=`echo "$FILENAME" | cut -d'.' -f1`

projectx $1

if [ -f "$DIR/$NAME.ac3" ]
then
	mplex -f 8 -o $DIR/$NAME.mpg $DIR/$NAME.ac3 $DIR/$NAME.m2v $DIR/$NAME.mp2
	rm $DIR/$NAME.ac3
else
	mplex -f 8 -o $DIR/$NAME.mpg $DIR/$NAME.m2v $DIR/$NAME.mp2
fi

rm $DIR/$NAME.m2v
rm $DIR/$NAME.mp2
rm $DIR/"$NAME"_log.txt

Da das Script ProjectX zum Demuxen benötigt, funktioniert das Ganze leider nur MPEG2-Videos. HDTV-Streams sind in h264 encodet, womit ProjectX nicht zurechtkommt.

"Time-Shift"

Da alle MPlayer-Instanzen beim Beenden der Aufnahme abgebrochen werden, kann MPlayer nicht zum unmittelbaren Wiedergeben des aufgezeichneten Streams verwendet werden (bzw. nur bis zum Ende der Aufnahmezeit). Allerdings lässt sich ein "Timeshift" mit MPlayer mit einen kleinen Trick realisieren: statt "mplayer" im Skript eine "Kopie" verwenden; also z.B. /usr/bin/tvmplayer. Dieses "Programm" muss natürlich erst erstellt werden, indem man /usr/bin/mplayer kopiert und als /usr/bin/tvmplayer wieder abspeichert. Damit wird bei Beenden der Aufnahme nicht "mplayer" beendet, sondern nur "tvmplayer", und der MPlayer kann ungestört weiter laufen. Noch komfortabler ist zur Wiedergabe der SMPlayer, der "merkt" sich nämlich auch noch, wo man ggf. stoppt, und fängt bei Neustart an der Stelle wieder an, wo man aufgehört hat zu schauen (greift allerdings auch auf /usr/bin/mplayer zurück, deshalb auch da der "Umweg" mit dem "tvmplayer").

Eine Variante des Skripts, die das sofortige Mischauen optional ermöglicht, findet sich im Forum.

Probleme

Falls beim Start des Skriptes eine Fehlermeldung der Art "Can't open /var/run/atd.pid to signal atd. No atd running?" erscheint, ist ggf. der Dienst atd nicht aktiv; Abhilfe siehe Dienste. Ggf. akzeptiert das Skript keine Sendernamen mit Leerstellen; hier hilft es, die Sendernamen in der channels.conf umzubenennen bzw. die Leerstellen zu entfernen.

Probleme können auch auftreten, wenn die Werte in der channels.conf in folgender Form vorliegen:

arte:482000:I999B8C23D12M16T8G4Y0:T:27500:201:202=DEU,203=FRE:204:0:2:8468:3329:0

Mplayer erkennt dann die Kanäle nicht; es erfolgt keine Aufnahme. Die Kanal-Daten müssen in folgender Form abgespeichert sein:

arte:482000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:201:202:2

Alternativen

  • Auch in Kaffeine lassen sich Aufnahmen nach EPG programmieren.

  • In Totem kann eine Aufnahmeprogrammierung über die "elektronische Programmzeitschrift" erfolgen.

  • Archiv/tvtr TV Timer erlaubt zeitgesteuerte DVB-Aufnahmen via Tray-Applet, gleichzeitiges Anschauen ist mit XINE vorgesehen.

Diese Revision wurde am 30. April 2021 09:17 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Multimedia, TV