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

Ü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)

Bild:ProjectX_settings_6_subtitle.png

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)

Bild:ProjectX_settings_4_video.png

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"
'Persönliche Werkzeuge