Und so gehts also unter Windows:
Die Aufnahmen der Dreambox sind ebenfalls 1:1 Aufnahmen des Original DVB-T Signals/Streams und haben dort auch die richtige Dateiendung '.ts'. Man kann diese z.B. mit dem Programm 'WinSCP' auf den PC transferieren, wenn man den FTP-Dienst der Dreambox freigeschaltet hat.
ffmpeg -i title.m2v -i title.mp2 -acodec copy -vcodec copy title.mpgbzw. mit ac3-Audio:
ffmpeg -i title.m2v -i title.ac3 -acodec copy -vcodec copy title.mpgDer Ton dieses Videos wird allerdings nur von wenigen Playern wiedergegeben. Dazu gehören unter Windows der 'Media Player Classic - Home Cinema' und als MediaServer die von A.C.Ryan. Der VLC Media Player unter Windows und der WD Live MediaServer bringen keinen Ton. Man kann aber die Stereo Audio Datei (mp2) und die Dolby Digital 5.1 Audio Datei (ac3) zusammen in das Video muxen. Dazu verwendet man folgenden Aufruf:
ffmpeg -i title.m2v -i title.mp2 -i title.ac3 -vcodec copy -acodec copy -acodec copy -map 0 -map 1 -map 2 title.mpgNun hat man einen passenden MPEG2 Videofilm für den MediaServer!
ffmpeg -i title.m2v ffmpeg -i title.mp2
Hier noch ein kleiner Ausflug in die Audio Konvertierung:
Wenn man den 5.1 AC3 Ton in einen Stereo Audio Ton umwandeln will, kann man folgenden Aufruf verwenden.
-ac definiert die Zahl der auszugebenden Audio-Kanäle und -ab die Bitrate (hier 320kBit). Ohne Angabe von -ab hätte die Audio Datei nur 128kBit.
ffmpeg -i title.ac3 -ac 2 -ab 320k title.mp2So kann man auch eine mp3-Datei generieren:
ffmpeg -i title.ac3 -ac 2 -ab 320k title.mp3Und wenn man ein Video hat, das nur einen Audio Stream mit AC3 enthält, kann man daraus auf die gleiche Art eine Stereo Audio mp2 Datei generieren:
ffmpeg -i title.mpg -ac 2 -ab 320k title.mp2Wenn die Input Datei mehrere Audio Streams enthält, muss man mittels -map Parameter angeben, welchen Stream man wandeln möchte, z.B.:
ffmpeg -i title.mpg -map 0:1 -ac 2 -ab 320k title.mp2Bei '0:1' bedeutet '0' die erste angegebene Input Datei (es ist hier nur eine angegeben, daher muss dieser Wert hier '0' sein) und '1' der zweite Stream dieser Datei (man fängt hier auch bei '0' an zu zählen).
ffmpeg -i title.m2v -i title.mp2 -ab 160000 title.mp4Dabei wird eine MP4-Datei erstellt mit einer Audio-Bitrate von 160kBit (ohne die Option -ab wären es default nur 128kBit). Diese lässt sich via iTunes auf das iPhone synchronisieren. Mit iTunes kann man der Datei auch noch ein Videocover mitgeben. Dieses wird in der Datei selbst gespeichert.
ffmpeg -i title.m2v -i title.mp2 -f mp4 -vcodec libxvid -maxrate 1000 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec aac -strict experimental -mbd 2 -s 640x360 -ab 160000 -vb 400000 title-iPod.mp4und für ein 4:3 Video:
ffmpeg -i title.m2v -i title.mp2 -f mp4 -vcodec libxvid -maxrate 1000 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec aac -strict experimental -mbd 2 -s 640x480 -ab 160000 -vb 400000 title-iPod.mp4Zwar hat der iPod nur ein Display von 320 Pixeln Breite, über eine Videoverbindung zum Fernseher macht sich aber die 640er Auflösung positiv bemerkbar. Wenn man das nicht braucht, kann man in den Kommandozeilen statt '-s 640x360' auch '-s 320x180' bzw. statt '-s 640x480' auch '-s 320x240' benutzen. Die Datei lässt sich via iTunes auf den iPod synchronisieren. Mit iTunes kann man der Datei auch noch ein Videocover mitgeben. Dieses wird dann in der Datei selbst gespeichert.
mplayer -dvd-device e: dvd://1 -dumpstream -dumpfile title1.vobDabei ist e: das DVD-Laufwerk. Das muss man dann natürlich entsprechend ersetzen. Für den zweiten Titel benutzt man:
mplayer -dvd-device e: dvd://2 -dumpstream -dumpfile title2.vobusw. Nun hat man die vob-Dateien, die der MediaStreamer direkt ausführen können sollte.
copy /b AVSEQ??.DAT title-temp.mpgbzw. für SVCDs:
copy /b AVSEQ??.MPG title-temp.mpgeine einzige mpg-Datei aus den Dateien einer oder meherer CDs.
Bei dieser muss man nun noch den Timecode richtig stellen. Dies kann man wieder mit 'FFmpeg' machen:
ffmpeg -i title-temp.mpg -acodec copy -vcodec copy title.mpgZur Info: Das hat bei mir in der Regel geklappt. Lediglich bei VideoCDs aus ZYX Produktionen gab es hier Fehler!
Diese Datei ist nun für den MediaStreamer geeignet.
Zur weiteren Info: Es lohnt sich nicht eventuell schwarze Balken aus einem 4:3 Video entfernen und zu einem 16:9 Video zu machen. Der Aufruf würde lauten:
für VCD: ffmpeg -i title.mpg -vf crop=in_w:216 -sameq -acodec copy title-16.mpg für SVCD: ffmpeg -i title.mpg -vf crop=in_w:360 -sameq -acodec copy title-16.mpgDie Dateien werden aber erheblich größer und werden neu codiert - das macht sie nicht schöner!
ffmpeg -i title.mpg -f mp4 -vcodec libxvid -maxrate 1000 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec aac -strict experimental -mbd 2 -ab 160000 -vb 400000 title.mp4Wer nur eine Auflösung von max 320 Pixeln Breite haben möchte (das ist meiner Meinung nach nur bei SVCDs sinnvoll), kann folgenden Aufruf versuchen:
ffmpeg -i title.mpg -f mp4 -vcodec libxvid -maxrate 1000 -qmin 3 -qmax 5 -bufsize 4096 -g 300 -acodec aac -strict experimental -mbd 2 -s 320x240 -ab 160000 -vb 400000 title-320.mp4Die Datei lässt sich via iTunes auf den iPod oder das iPhone synchronisieren. Mit iTunes kann man der Datei auch noch ein Videocover mitgeben. Dieses wird dann in der Datei selbst gespeichert.
Zur Info: Für das iPhone würde auch folgendes Kommando genügen:
ffmpeg -i title.mpg -ab 160000 title-iphone.mp4
Man lädt aslo zunächst eine Videodatei title.mpg.avi.otrkey . Nach dem Decodieren heißt die Datei title.mpg.avi und kann bereits im VLC Media Player angeschaut werden. Man stellt aber fest, dass - wie bei Fernsehaufzeichnungen üblich - die Videodatei ca. 10 Minuten Vorlauf und 10 Minuten Nachlauf enthält und oft natürlich auch noch Werbung enthält. Somit empfiehlt es sich für dauerhaftes Archivieren, diese Videodatei zurechtzuschneiden.
ffmpeg -i title.mpg.avi -vcodec mpeg2video -qscale:v 2 title.mpg.m2v ffmpeg -i title.mpg.avi -ab 192k title.mpg.mp2
ffmpeg -i title.m2v -i title.mp2 -acodec copy -vcodec mpeg2video -qscale:v 2 title.mpgSollte - wie oben beschrieben - das Video verzerrt sein, dann sollte man das entsprechende richige Format als Parameter mit angeben:
ffmpeg -i title.m2v -i title.mp2 -acodec copy -vcodec mpeg2video -qscale:v 2 -aspect 16:9 title.mpgUnd sollte der Film original im 4:3 Format sein, der Stream aber 16:9 mit schwarzen Balken links und rechts gesendet worden sein, dann sollte man das entsprechende richige Format als Parameter mit angeben und das Videobild entsprechend beschneiden (crop-Filter).
ffmpeg -i title.m2v -i title.mp2 -acodec copy -vcodec mpeg2video -qscale:v 2 -aspect 4:3 -filter:v "crop=960:720:160:0" title.mpgtitle.mpg ist dann das geschnittene Video in MPEG2 Format, das auf dem MediaStreamer abgespielt werden kann.
Wenn man das Video etwas platzsparender codieren möchte, kann man das mkv-Format nutzen. Dazu muss man dann die geschnittenen Streams mit dem folgenden Kommando wieder zusammensetzen. Allerdings dauert dieser Vorgang dann erheblich länger als beim MPEG2 Format:
ffmpeg -i title.m2v -i title.mp2 -c:v libx264 -crf 23 -c:a eac3 -b:a 256k title.mkvAnalog kann man dann auch bei Bedarf das Format korrigieren:
ffmpeg -i title.m2v -i title.mp2 -c:v libx264 -crf 23 -c:a eac3 -b:a 256k -aspect 16:9 title.mkvbzw.
ffmpeg -i title.m2v -i title.mp2 -c:v libx264 -crf 23 -c:a eac3 -b:a 256k -aspect 4:3 -filter:v "crop=960:720:160:0" title.mkv
Als DVB-T2 Empfänger habe ich mir den Xoro HRT 7620 und dann noch den Xoro HRT 8720 angeschafft. Damit kann man auch die Streams auf ein USB-Medium aufnehmen, die man dann am PC in ein H.264 wandeln kann, damit es ein MediaStreamer, der kein H.265 unterstützt, auch abspielen kann. Gleichzeitig kann man den Stream schneiden (z.B. Anfang und Ende). Die verschlüsselten privaten Sender kann man auf die im Folgenden genannte Weise jedoch nicht schneiden.
Die Streams im mts- oder ts-Container kann man mit ffmpeg -i title.ts
analysieren (title.mts-Dateien am besten zu title.ts umbenennen).
Hier ein Beispiel für 'One' (Mai 2020):
Konvertierung mit ffmpeg von H.265/HEVC zu mkv (H.264)
-i title.ts
-map
den Stream identifizieren. Danach die Optionen
-c:v libx264 -crf 23
für den Output ergänzen. -crf 23
beim Output ergibt in etwa die gleiche Zieldateigröße für mkv bei '1920x1080'-Streams. Je kleiner der -crf
-Wert ist, desto höher ist die mkv-Videoqualität. (Bei '1280x720'-Streams wäre der Wert -crf 19
.)-s 1280x720
. Damit wird dann die Dateigröße der Ergebnisdatei signifikant verkleinert. Wenn man allerdings Untertitel mitkonvertieren will, werden diese im Bild nicht verkleinert und oft ist der rechte Teil der Untertitel dann nicht mehr lesbar.-s 960x540
oder gar -s 640x360
angeben. Letzteres wird dann aber schon deutlich sichtbar.
-map
den oder die Streams identifizieren. Danach jeweils die Option -c:a:0 copy
für den Output Stream festlegen. :0 gibt dabei an, für welchen der (Output-)Audiostreams diese Option gilt. Es wird bei '0' angefangen zu zählen. Wenn alle Audiostreams in eac3 vorliegen, kann man auch einmalig -c:a copy
angeben. Auch 5.1 Streams werden dann als Raumklang übernommen.
-map
den oder die Streams identifizieren. Danach jeweils die Optionen -c:a:1 eac3 -b:a:1 256k
für den Output Stream festlegen. :1 gibt dabei an, für welchen der (Output-)Audiostreams diese Optionen gelten. Es wird bei '0' angefangen zu zählen.
Per default würde nur in eine Bitrate von 128k codiert werden. Durch die Opion -b:a 256k
wird diese auf 256k gesetzt. Wenn alle Audiostreams in aac_latm vorliegen, kann man auch einmalig -c:a eac3 -b:a 256k
angeben.
Wenn man mehrere Audiostreams hat, kann man diese auch durch Anhängen von :0, :1 etc. identifizieren und z.B. unterschiedliche Metadaten definieren.
Z.B. kann man durch Ergänzen von -metadata:s:a:1 language=eng
den zweiten Audiostream explizit als 'englisch' markieren, falls dieser, wie bei 'One' geschehen, fälschlicherweise als 'deutsch' gesendet wurde.
Beim Abspielen kann es nun sein, dass zu Beginn anstelle des deutschen Tons, der englische Ton ausgewählt wird. Um zu steuern, dass der erste Audiostream als default ausgewählt werden soll, kann man dies mit der Option -disposition:a:0 default
angeben. Man sollte bei allen anderen Audiostreams diese Markieung sicherheitshalber mit -disposition:a:1 none
entfernen, da manchmal im Original alle Audiostreams diese Markieurung besitzen, die dann eben entfernt werden muss.
dvb_subtitle
zum Format dvdsub
konvertieren.
Dazu zunächst mit -map
den oder die Subtitlestreams identifizieren (nur dvb_subtitle, nicht dvb_teletext). Danach mit
-c:s dvdsub
den oder die Subtitle nach dvdsub konvertieren. Auch -c:s copy
ist möglich.
Zumindest der VLC-Player zeigt dann die Untertitel auch an (mein A.C.Ryan Streamer leider nicht). Wenn man beim Video mit -s
die Auflösung verringert hat, kann es sein, dass die Untertitel nicht mehr komplett angezeigt werden, da die Größe der Untertitel nicht proportional zur geänderten Auflösung verkleinert wird.
Wenn man mehrere Untertitel hat, kann man diese auch durch Anhängen von :0, :1 etc. identifizieren und z.B.
unterschiedliche Metadaten definieren.
Z.B. kann man durch Ergänzen von -metadata:s:s:0 language=ger
den ersten Untertitel explizit als 'deutsch' markieren.
-ss hh:mm:ss
gibt den (leider etwas ungenauen) Startzeitpunkt an. Die Option -t hh:mm:ss
gibt dann die (Ziel-)Länge des Videos an (also nicht den Endzeitpunkt im Ausgangsstream). Diese Werte kann am PC z.B. mit dem VLC Player ermitteln (Achtung: Nicht Version 3.0.x nehmen. Mit Version 2.2.8 (64bit, Windows) kann der Player H.265/HEVC abspielen.
title.mkv
Für das obige erste Beispiel ('One') ergibt sich dann folgender Befehl:
ffmpeg -i title.ts -map 0:4 -map 0:5 -map 0:6 -c:v libx264 -crf 23 -c:a eac3 -b:a 256k -metadata:s:a:1 language=eng -disposition:a:0 default -disposition:a:1 none -s 1280x720 -ss 00:04:44 -t 00:47:48 title.mkv
Für das obige zweite Beispiel ('ZDF neo') ergibt sich folgender Befehl:
ffmpeg -i title.ts -map 0:1 -map 0:2 -map 0:3 -map 0:4 -map 0:6 -c:v libx264 -crf 23 -c:a copy -c:s dvdsub -s 1280x720 -ss 00:12:26 -t 01:19:16 title.mkv
Weitere Codierungsbeispiele aus früheren Ausstrahlungen
Ausstrahlung Oktober 2018 bei den Sendern 'One', 'BR' oder 'Das Erste':'
ffmpeg -i title.ts -map 0:3 -map 0:4 -map 0:5 -c:v libx264 -crf 23 -c:a eac3 -b:a 256k -s 1280x720 -ss 00:11:18 -t 01:45:13 title.mkv
Ausstrahlung Oktober 2018 beim Sender 'ZDF Info':
ffmpeg -i title.ts -map 0:0 -map 0:1 -map 0:2 -map 0:4 -c:v libx264 -crf 23 -c:a copy -c:s dvdsub -s 1280x720 -ss 00:12:26 -t 01:19:16 title.mkv
Testausstrahlung Anfang 2016 beim Sender 'Das Erste':
ffmpeg -i title.mts -map 0:2 -map 0:7 -map 0:3 -map 0:4 -map 0:6 -c:v libx264 -crf 23 -c:a:0 copy -c:a:1 eac3 -b:a:1 256k -c:a:2 eac3 -b:a:2 256k -c:s copy -ss 00:11:18 -t 01:45:13 title.mkv
Testausstrahlung Anfang 2016 beim Sender 'arte':
ffmpeg -i title.mts -map 0:1 -map 0:2 -map 0:3 -map 0:6 -map 0:5 -map 0:7 -c:v libx264 -crf 19 -c:a eac3 -b:a 256k -c:s copy -ss 00:12:26 -t 01:19:16 title.mkv
Schneiden von Werbeunterbrechungen bzw. Zusammenfügen von Streams
Wenn man nun Werbeunterbrechungen entfernen will, muss man bei ffmpeg alle Teile des Films einzeln aus der Gesamtaufnahme herauskodieren und anschließend wieder zusammenfügen. Dies war bei mir z.B. bei der Vorabendserie Hubert und Staller im Ersten notwendig. Die notwendigen Schritte dazu waren dann:
ffmpeg -i title.ts -map 0:3 -map 0:4 -map 0:5 -c:v libx264 -crf 23 -c:a eac3 -b:a 256k -ss 00:00:04 -t 00:28:22 title-1.mkv ffmpeg -i title.ts -map 0:3 -map 0:4 -map 0:5 -c:v libx264 -crf 23 -c:a eac3 -b:a 256k -ss 00:32:28 -t 00:19:41 title-2.mkv
echo file 'title-1.mkv' > titles.txt echo file 'title-2.mkv' >> titles.txt
ffmpeg -f concat -i titles.txt -map 0:0 -map 0:1 -map 0:2 -c copy title.mkv
Und etwas komfortabler mit Avidemux
Auch mit Avidemux 2.7 oder neuer lassen sich H.265 Streams direkt schneiden und konvertieren. Avidemux benutzt im Hintergrund ebenfalls ffmpeg. Wie man damit umgeht, werde ich hier aber nicht beschreiben. Dafür gibt es schon einige Anleitungen im Netz.
Axel Findling, 2011-11-24