DVD-Erstellung (Linux)
aus TopfWiki, der freien Wissensdatenbank
Erste Version erstellt für Topfield TF 4000 PVR unter Debian (Sidux).
Die farbigen Untertitel von BBC und ITV (Astra 2) bilden eine zweite Untertitelspur.
Inhaltsverzeichnis |
1.1 Anschließen der Festplatte an den Rechner |
Übertragung der Dateien von der Receiver-Festplatte auf den Rechner
Anschließen der Festplatte an den Rechner
Das funktioniert unter Linux nur, wenn der Rechner eine IDE-Schnittstelle hat:
sudo apt-get install libfuse2 fuse-utils libfuse-dev scons && sudo modprobe fuse
tffs (Topfield File System) von http://www.glasstetter.net/dvbcut/tffs-0.9.1.tar.gz herunterladen, in ein Verzechnis extrahieren und wie in der Datei INSTALL beschrieben kompilieren.
Dadurch wird im Unterordner bin eine Datei namens mount.tffs erstellt, die nach /sbin kopiert werden muss.
sudo cp ./bin/mount.tffs /sbin/
Alternative Quelle für tffs: http://tffs.sourceforge.net/ (liegt dort als source und als deb-Paket).
Erstellen eines Mountpunktes, z.B.
sudo mkdir /media/topf
Festplatte an die IDE-Schnittstelle anschließen, PC hochfahren, Devicenamen herausfinden, z.B in der Ausgabe von dmesg oder Link finden in /dev/disk/by-id
Heißt die Platte z.B. /dev/sdb, bindet man sie ein mit:
sudo mount.tffs /dev/sdb /media/topf -o allow_other
Kopieren auf den Rechner, Korrektur unlesbarer Dateinamen
Das Kopieren und Umbenennen der Dateien erledigt man mit dem Midnight Commander. Zum Starten als Nutzer mc auf der Konsole eingeben, markieren mit der "Einfg"-Taste, Kopieren mit F5. Das Kopieren mit dem Konqueror hat schon zu unlesbaren Dateien geführt.
Die Dateinamen können unlesbare Zeichen haben, insbesondere bei Verwendung von tffs 0.9.0 aus der o.g. alternativen Quelle. Diese unlesbaren Zeichen lassen sich mit dem mc ändern (F6 drücken), Ohne Namensänderung ist die Datei für Project-X "nicht vorhanden".
Schneiden und demuxen mit Project-X
Installieren von Project-X unter Linux
Als Nutzer ein Installationsverzeichnis erstellen, hineinwechseln. Falls die Java-Runtime- und Entwicklungsumgebung und cvs noch nicht installiert sind:
sudo apt-get install cvs openjdk-6-jdk openjdk-6-jre
neueste Project-X Version herunterladen mit:
cvs -z3 -d:pserver:anonymous@project-x.cvs.sourceforge.net:/cvsroot/project-x co -P Project-X
cd in das source-Verzeichnis (z.B. ProjectX_Source_0.90.4), kompilieren mit
sudo chmod u+x build.sh && sh ./build.sh (falls das Kompolieren scheitert, klappt evtl. bash ./build.sh
ProjectX als Benutzer starten mit:
java -jar ProjectX.jar
in demselben Verzeichnis. Am besten eine Starterverknüpfung auf den Desktop legen, die den Befehl enthält java -jar /PFAD/ZUR/ProjectX.jar
Ich empfehle außerdem die stabile Project-X Version von http://sourceforge.net/projects/project-x/ zusätzlich in einem anderen Verzeichnis zu installieren, denn mal scheitert die aktelle Version an den Untertiteln, mal die stabile.
Project-X Einstellungen für farbige Untertitel
(nicht Linux-spezifisch, jedoch baut das übrige Tutorial darauf auf)
Wichtig ist der Abschnitt subtitle: Videotextseite 888 für ITV und BBC (für andere Sender Ausgabe von ProjectX beachten oder Homepage des Senders konsultieren), Untertitel Exportformat "SUP" und "SRT". Schriftart für die Farbuntertitel auswählen. Vorschlag: Trebuchet_MS aus den msttcorefonts.
getestete Werte für Val: 26;30;67;40;500;710;576;-1;4;3;1
bedeutet:
26 - Pixel (px) Schriftgröße
30 - %Transparenz
67 - px Y-Diff (Abstand der Untertitel vom unteren Rand)
40 - px X-Diff (dito von links)
500 - px Breite der Untertitel
710 - px Bildbreite
576 - px Bildhöhe
-1 - px Y2-Diff (keine Ahnung, habe ich unverändert gelassen)
4 - max Untertitelzeilen
3 - px scharzer Rand um die Buchstaben
1 - fette Buchstaben ja=1
(die beiden letzten Werte gibt es nur in der aktuellen Project-X Version)
Wichtig für nicht-DVD-konform gesendete Formate, z.B. von ITV:
Bei den Einstellungen für "Video": in der Auswahlbox "patch 1st h-res" "if <> 352|704|720" auswählen, in der Box rechts daneben "720" einstellen. Damit wird das Video DVD-konform und die o.g. Einstellungen zu den Subtiteln passen dazu. Die Einstellung ändert nicht die tatsächliche Auflösung, vermutlich weiß dann nur der Player, was er zeigen soll.
Linux-Tools für die DVD-Erstellung
Wir brauchen:
mplex aus den mjpegtools zum Zusammenfügen der von ProjectX erstellten Video-und Audiospuren zur mpg-Datei, avconv aus den libav-tools, für den Fall, dass mplex an zu hoher Datenrate scheitert alternativ ffmpeg, falls die Distribution avconv nicht anbietet. In diesem Fall muss in den Skripten avconv durch ffmpeg ersetzt werden, die Syntax ist gleich. Trebuchet MS aus den msttcorefonts als gut lesbare Untertitelschriftart convert aus dem Paket imagemagick zum Stauchen der ITV-Untertitelbilder dvdauthor inkl. dem darin enthaltenen spumux zum Hinzufügen von Untertiteln und Erstellen der DVD
In den den Distributions-Repositories sind die folgenden Pakete:
sudo apt-get install libav-tools imagemagick dvdauthor vlc msttcorefonts (alternativ ffmpeg statt libav-tools)
Weiterhin brauchen wir mplex aus den mjpegtools. Wer das Paket nicht in den Repositories findet (Ubuntu z.B. in Multiverse), findet sie auf http://debian-multimedia.org. Auf deren Homepage ist beschrieben wie die sources.list ergänzt werden muss und wie man den debian-multimedia-keyring installiert.
Wenn das erledigt ist:
sudo apt-get update && sudo apt-get install mjpegtools
Für Farbe in den Untertiteln brauchen wir noch pxsup2dast: Von http://www.guru-group.fi/~too/sw/m2vmp2cut/pxsup2dast.c runterladen und wie in der Datei beschrieben kompilieren - ist kinderleicht! Falls das Kompilieren an "unerwarteten Zeichen" im Programm scheitert, klappt es mit dem Befehl "bash" statt wie im Quelltext angegeben "sh". Falls das Kompilieren an angeblich fehlenden Rechten scheitert: prüfen, ob die Datei ausführbar ist (chmod u+x pxsup2dast.c) - und prüfen, ob die Datei auf einem non-executable-Dateisystem liegt, z.B. auf der zweiten Festplatte. Das Kompilieren erzeugt aus der pxsup2dast.c die Programmdatei pxsup2dast, die kommt entweder in /usr/bin/ oder in den Skripteordner, den wir im nächsten Schritt erstellen und in den Pfad aufnehmen!
Vorbereitung der Ordner
Wir legen uns mit mkdir $HOME/scripts einen Ordner an, in den die Konfigurationsdateien subtitle.xml und dvdauthor.xml kopiert werden. Diese xml-Dateien werden bei der Verarbeitung benötigt. Ebenfalls in den Skripteordner gehören ggf. die unten gelisteten Skripte, die das Verfahren automatisieren.
Dann stellen wir sicher, dass die in subtitle.xml genannte ttf-Schriftartendatei im Verzeichnis $HOME/.spumux vorhanden ist. Ggf muss die subtiltle.xml editiert und/oder der Ordner $HOME/.spumux erstellt werden. Wenn die msttcorefonts installiert sind, passen wir unser System dem Inhalt der Beispielsdatei an durch Eingabe von:
cp /usr/share/fonts/truetype/msttcorefonts/Trebuchet_MS.ttf $HOME/.spumux
Man beachte den Punkt im Verzeichnisnamen ".spumux"!
Sodann braucht dvdauthor und auch ffmpeg eine Vorgabe für das Videoformat PAL. Wir legen deshalb eine Textdatei namens video_format an mit dem Inhalt PAL im Ordner $HOME/.config.
Falls Ihr die Skripte verwenden wollt, empfiehlt es sich, diese in den Skripteordner zu kopieren und den Skripteordner in den Pfad aufzunehmen.
Hierzu muss man die Datei $HOME/.bashrc mit dem Editor öffnen und um folgende Zeile ergänzen:
export PATH="$HOME/scripts:$PATH"
Wenn man nicht auf diese Weise den Pfad erweitert, müssen die ausführbaren Dateien (z.B. die pxsup2dast) in einen Ordner im Pfad, z.B. in /usr/bin/, oder man muss sie mit dem vollen Pfad aufrufen.
Schließlich muss man noch dafür sorgen, dass die Skripte ausführbar sind, z.B. mit :
chmod u+x SKRIPTNAME
Die Einzelschritte zur DVD-Erstellung
Zusammenführen (muxen) der Spuren zur mpg-Datei mit mplex (ohne Untertitel)
ProjectX hat idealerweise folgende Dateien erstellt:
m2v - Videodatei ohne Ton
mp2 - Tonspur(en)
srt - Textuntertitel
sup und sup.IFO - Untertitelbilder und Farbinformationen
evtl. idx - weitere Untertitelinformationen
Wir öffnen ein Terminal in dem von ProjectX erstellten Verzeichnis, z.B in KDE durch Rechtsklick - Aktionen - Terminal hier öffnen.
dann erstellen wir eine mpg-Datei (zunächst ohne Untertitel) aus den Film- und Tonspuren:
mplex -f 8 -M -o Film.osub.mpg *.m2v *.mp2
Falls das an einer zu hohen Datenrate scheitert, muss avconv ran. Das verträgt nur die Angabe einer Tonspur als wildcard. Gibt es mehrere, muss man jede Tonspur mit "-i Sounddatei" einzeln angeben. Meistens genügt es aber, die nicht benötigte Datei zu löschen oder die Dateiendung zu ändern. In der Regel enthält die zweite Spur Ansagen für Sehgeschwächte. Die Skripte verarbeiten alle Tonspuren.
nur wenn mplex scheitert: ffmpeg -i *.m2v -i *.mp2 -target dvd Film.osub.mpg mit nur einer mp2-Datei
ffmpeg benötigt ein Mehrfaches der Zeit als mplex, denn es fügt nicht nur Spuren zusammen, sondern verändert das Video.
Hinzufügen der srt-Textuntertitel mit spumux
Als nächstes kopieren wir die Konfigurationsdateien subtitle.xml und dvdauthor.xml aus dem Skripteordner in das aktuelle Verzeichnis:
cp $HOME/scripts/*.xml ./
Dann ändern wir den Namen der srt-Text-Untertiteldatei in subtitle.srt, denn dieser Name ist in der subtitle.xml hartverlinkt:
mv *.srt subtitle.srt
Dann fügen wir die Text-Untertitel als erste Untertitelspur ein:
spumux -s 0 subtitle.xml < Film.osub.mpg > Film.suboc.mpg
Erstellen und einfügen der farbigen Untertitelbilder mit pxsup2dast und spumux
Falls es sup-Dateien mit [888] im Namen gibt (die anderen sehen nicht so gut aus), füttern wir pxsup2dast damit, das erstellt einen Unterordner Film.d mit den farbigen Untertitelbildern und einer passenden spumux.xml:
rename 's/.*\[888\]/Film/' *\.sup* && pxsup2dast Film.sup Film.sup.IFO
Die von pxsup2dast erstellte spumux.xml kopieren wir ins Arbeitsverzeichnis und fügen die Untertitelbilder als zweite Untertitelspur hinzu:
cp Film.d/spumux.xml ./ && spumux -s 1 spumux.xml < Film.suboc.mpg > Film.sub.mpg
Erstellen der DVD-Struktur mit dvdauthor
Die farbigen Untertitel werden nur von VLC Media Player dargestellt und auch nur dann, wenn ein DVD-Ordner abgespielt wird. Deshalb erstellen wir jetzt einen Ordner namens DVD und lassen dvdauthor die DVD-Struktur erstellen, die dann auf DVD gebrannt werden kann. Auch der DVD-Player im Wohnzimmer kann die farbigen Untertitel darstellen.
mkdir DVD && dvdauthor -x dvdauthor.xml
Die dvdauthor.xml haben wir oben bereits in das Arbeitsverzeichnis kopiert. Der Name des Zielordners DVD ist in der dvdauthor.xml hartverlinkt, ebenso der Name der zu verarbeitenden Film.sub.mpg.
Anschauen des Filmes mit farbigen Untertiteln
Zum Anschauen des Filmes den Ordner namens DVD mit VLC öffnen.
Tipp: In der KDE-Systemeinstellung - Erweiterte Benutzereinstellung - Dateizuordnung - inode - directory den VLC hinzufügen. Danach erscheint VLC im Kontextmenü des (DVD-)Verzechnisses.
Vorlagen für Konfigurationsdateien
Inhalt von subtitle.xml
<subpictures> <stream> <textsub filename="subtitle.srt" characterset="UTF-8" fontsize="22.0" font="Trebuchet_MS.ttf" horizontal-alignment="center" vertical-alignment="bottom" left-margin="40" right-margin="60" top-margin="20" bottom-margin="40" subtitle-fps="25" movie-fps="25" movie-width="590" movie-height="574" force="yes" /> </stream> </subpictures>
Inhalt von dvdauthor.xml
<?xml version="1.0" encoding="UTF-8" ?> <dvdauthor dest="DVD"> <vmgm /> <titleset> <titles> <audio lang="en" /> <pgc> <vob file="Film.sub.mpg" chapters="0:0" pause="5" /> </pgc> </titles> </titleset> </dvdauthor>
Skript zur Automatisierung
Anmerkung zu den Untertiteln
Für die von ITV aufgenommenen Filme mit 544x576 Pixeln im 16:9 Breitbildformat gibt es ein separates Skript, denn bei denen werden bei der in den Einzelschritten beschriebenen Vorgehensweise die Untertitelbilder in die Breite verzerrt, sie laufen dann über die gesamte Breite des Filmes. Das sieht nicht nur unschön aus, sondern man muss zum Lesen die Augen über das gesamte Bild bewegen.
Das Pixelformat 544:576 entspricht nicht 16:9, deshalb stellt der Player bei diesen Filmen jedes Pixel breiter dar. Die Originalbilder in der Videodatei sind in der Breite zusammengestaucht, so dass sie in "Breitpixeln" dargestellt normal aussehen. Die von pxsup2dast extrahierten Bilder sind jedoch nicht zusammengestaucht, so dass sie bei Darstellung in breiten Pixeln in die Breite gezogen werden. Das Skript analysiert anhand der Logdatei von ProjectX, ob das Pixelformat 544:576 bei 16:9 vorliegt und staucht in diesem Fall die Untertitel.
Vorbereitung des Skripts
Mit dem unten beschriebenen Inhalten eine Datei namens (z.B.) film.sh erstellen im Ordner $HOME/scripts (oder alternativ in /usr/bin), mit
chmod u+x SKRIPTNAME
ausführbar machen.
Anwendung des Skripts
Man wechselt in das von ProjectX erstellte Verzeichnis (z.B. in KDE durch Rechtsklick - Aktionen) und gibt ein:
film.sh FILMNAME
Hat man vergessen, den Filmnamen einzugeben, fragt das Skript nach.
Das Skript führt die oben beschriebenen Einzelschritte aus und behandelt dabei ggf. auftretende Fehler.
- Gibt es keine Untertitel, wird eine FILMNAME.osub.mpg erstellt
- Gibt es nur Textuntertitel, wird eine FILMNAME.suboc.mpg erstellt
- Gibt es farbige Untertitel, aber das Erstellen der DVD scheitert, wird eine FILMNAME.sub.mpg erstellt
- Als Normalfall wird nur der DVD-Ordner erstellt.
- Gibt es neben den farbigen Untertitelbildern auch Textuntertitel, enthält die DVD zwei Untertitelspuren.
- Die srt-Textuntertiteldatei wird beibehalten. Sie kann mit dem Editor gelesen werden und von einigen Playern separat geladen werden. Außerdem kann man sie z.B mit dem subtitleeditor bearbeiten.
Zum Schluss wird der Arbeitsordner umbenannt in FILMNAME.
Wichtig
Die Originaldatei vom Topf sollte man behalten, bis das Ergebnis überprüft ist.
Inhalt der film.sh
#! /bin/bash if test $1 then filmname="$1" else echo "Filmname eingeben:" read "filmname" fi set -x # ab jetzt zeigt das Skript an, was es macht rename 's/ /_/g' * #Leerzeichen in Dateinamen durch Unterstriche ersetzen rename 's/:/-/g' * #ersetzt : durch - in Dateinamen, ffmpeg mag keine Doppelpunkte mplex -f 8 -M -o Film.osub.mpg *.m2v *.mp2 fehler="$?" if [ "$fehler" != 0 ] #mplex ist an zu hoher Datenrate gescheitert, avconv muss ran then rm *.mpg # Reste von mplex aufräumen #Inhalt der Variable o löschen, o bekommt "-i Tonspurdatei" für jede Tonspur o= ac3files=$(ls *.ac3 2> /dev/null | wc -l) # wie viele ac3-files gibt es if [ $ac3files -gt 0 ] then for ac in *.ac3 do o="$o -i $ac" done fi for i in *.mp2 #mp2s gibt immer mindestens eine do o="$o -i $i" done avconv -i *.m2v $o -target pal-dvd Film.osub.mpg fi # mplex, Film.osub.mpg wurde erstellt if test -e *.srt # gibt es Text-Untertitel? then mv *.srt subtitle.srt cp subtitle.srt "$filmname.srt" spumux -s 0 $HOME/scripts/subtitle.xml < Film.osub.mpg > Film.suboc.mpg && fehler_suboc="$?" if [ "$fehler_suboc" == 0 ] # Suboc erfolgreich integriert? then rm Film.osub.mpg else rm Film.suboc.mpg # Reste aufräumen fi #suboc fi #srt rename 's/.*\[888\]/Film/' *\.sup* if test ! -e Film.sup # "!" ist die Verneinung: Bedingung ist wahr, wenn es keine Film.sup gibt then rename 's/.*\.sup/Film.sup/' *\.sup* # falls es keine [888] Teletext-Untertitel gibt, werden die anderen genommen. fi #! Film.sup stauchen=0 if test -e Film.sup then pxsup2dast Film.sup Film.sup.IFO && bbc=$(grep -c -m 1 "720\*" *_log.txt) b=$(grep -c -m 1 "16:9" *_log.txt) if [ $bbc -ne 0 ] # nicht BBC then if [ $b -gt 0 ] # 16:9 im Text then c=$(grep -c -m 1 "4:3" *_log.txt) if [ $c -gt 0 ] # auch 4:3 im Text then d=$(grep -n -m 1 "16:9" *_log.txt) d1="${d//:*/}" e=$(grep -n -m 1 "4:3" *_log.txt) e1="${e//:*/}" if [ $e1 -gt $d1 ] # 16:9 zuerst, also ist das Format 16:9 then stauchen=1 fi #gt else # kein 4:3 im Text, Format ist 16:9 stauchen=1 fi # c fi # 16:9 fi # nicht BBC if [ $stauchen -eq 1 ] # # ab hier werden die Bilder gestaucht, wenn erforderlich then cd Film.d for i in *.png; do convert $i -background Transparent -sample 85%x100 $i done cd .. fi # stauchen cp Film.d/spumux.xml ./ && if test -e Film.suboc.mpg #text-sub sind schon drin, Farbe als zweite Spur then spumux -s 1 spumux.xml < Film.suboc.mpg > Film.sub.mpg fehler_sub="$?" if [ "$fehler_sub" == 0 ] # Sub mit Farbe integriert? then rm Film.suboc.mpg else rm Film.sub.mpg mv Film.suboc.mpg "$filmname.suboc.mpg" fi #fehler_sub1 else # keine Text-subs, Farbe als erste Spur spumux -s 0 spumux.xml < Film.osub.mpg > Film.sub.mpg fehler_sub2="$?" if [ "$fehler_sub2" == 0 ] # Sub mit Farbe integriert? then rm Film.osub.mpg else rm Film.sub.mpg mv Film.osub.mpg "$filmname.osub.mpg" fi # fehler_sub2 fi #Film.suboc fi # Film.sup if test -e Film.sub.mpg then mkdir DVD && dvdauthor -x $HOME/scripts/dvdauthor.xml && fehler_dvd="$?" rm dvdauthor.xml if [ "$fehler_dvd" == 0 ] then rm Film.sub.mpg else mv Film.sub.mpg "$filmname.sub.mpg" fi #dvd fi #Film.sub.mpg verz="$PWD" rm subtitle.srt rm *.txt rm *.m2v rm *.mp2 rm *.IFO rm *.idx rm *.sup rm *.sub rm -R Film.d rm *.xml cd .. mv "$verz" "$filmname"