Immer wieder wird hier im Forum die Frage gestellt, wie man einen Film auf dem PC, der in einem Nicht-MPG-Format (z.B. AVI) vorliegt, in einen TS-Stream umwandeln kann, um Ihn dann über den Movieplayer auf der Box anschauen zu können. Es gibt zahlreiche Programme, kostenlose wie -pflichtige, die dies machen, meisst aber brauchen die eine halbe Ewigkeit und das Ergebnis ist auch nicht berauschend.
Durch eine Bemerkung von jmittelst bin ich auf FFMPEG aufmerksam geworden, da ich selber auch vor dem Problem stand und bis dato keine befriedigende Lösung gefunden hatte. Meisst waren mehrere Arbeitsschritte nötig, die Konvertierung an sich brauchte wie gesagt eine Ewigkeit und das Ergebnis war nicht so berauschend, soll heissen, dass die Quali der Filme durch die Konvertierung gelitten hat.
Nicht so mit FFMPEG! FFMPEG ist verdammt schnell (Ein 2 Stundenfilm ist in weniger als einer Stunde konvertiert!) und die Qualität des resultierenden Films ist genauso gut (oder schlecht

Ganz einfach, es ist ein Kommandozeilen basiertes Tool. D.h. es gibt keine GUI (Graphic UserInterface, zu deutsch grafische Benutzeroberfläche), in der man durch setzen von Häkchen, drücken von Buttons recht problemlos zum Ziel kommt. Man muss jede Einstellung von Hand vornehmen, und das sind je nach dem zu konvertierenden Material eine Menge. Zusätzlich kommt hinzu, dass FFMPEG ein OpenSource-Projekt ist, offiziell wird nur der Quellcode zum Download angeboten (ähnlich wie bei ProjectX). Es ist nicht in Java programmiert, sondern basiert auf einer Linux C-Version, da es ursprünglich mal für Linux entwickelt wurde. Für Windows braucht man eine entsprechende Entwicklungsumgebung von MINGW, um eine Executable zu kompilieren.
Wer allerdings ein bisschen nach "FFMPEG" und "Executable" oder "Binary" googelt, findet auch bereits fertige Win32-Binaries zum Downloaden, zumindest hab ich es so gemacht.
Wer eine Windows-Executable selber kompilieren will, findet Hilfe dazu unter http://ffmpeg.sourceforge.net/ffmpeg-doc.html. Dies ist übrigens auch die Homepage von FFMPEG.
Da ich mich nun in den letzten Tagen von der Leistungsfähigkeit des Tools überzeugt konnte, nebenbei viel experementiert habe, leiste ich nun Überzeugungsarbeit und versuche das Programm bzw. die Optionen ein wenig zu erläutern bzw. welche Einstellungen wann vorzunehmen sind, denn eigentlich braucht man nur ein paar der unendlich vielen Optionen.
Fangen wir einfach mal an:
Erst mal Grundsätzliches: Damit ich FFMPEG recht einfach von überall aufrufen kann, hab ich das Programmverzeichnis in die Systemvariable PATH mit angehängt. So brauche ich nur noch ein DOS-Fenster zu öffnen, in das Verzeichnis wechseln, in dem sich der zu konvertierende Film befindet und dann FFMPEG nur noch aufzurufen. Erspart eine Menge Tipperei durch den Wegfall der Pfadangaben.
Ruft man FFMPEG ohne weitere Parameter auf, wird die komplette Optionenliste angezeigt. Da diese sehr lang ist, scrollt das DOS-Fenster natürlich durch. Insgesamt sind's 169(!) Optionen, von denen aber zum Konvertieren ca. 20 lediglich gebraucht werden.
Macht's einfach mal, nur damit ihr es mal gesehen habt!

Auf der Platte habe ich schon länger ein AVI rumfliegen, dass ich mir gerne mal am Fernseher anschauen möchte, "Getaway in Stockholm 4 CD2.avi".
Um zu erfahren, in was für einem speziellem Format der Film genau vorliegt, gebt
ffmpeg -i "Getaway In Stockholm 4 CD2.avi"
ein (Die Anführungszeichen sind notwenig wegen der Blanks im Dateinamen). Folgende Meldung erscheint:
H:\Movie>ffmpeg -i "Getaway In Stockholm 4 CD2.avi"
ffmpeg version 0.4.9-pre1, build 4743, Copyright (c) 2000-2004 Fabrice Bellard configuration: --enable-mp3lame --enable-vorbis --enable-faad --enable-faac --enable-xvid --enable-mingw32 --enable-a52 --enable-dts --enable-pp --enable-gpl --enable-memalign-hack
built on Feb 22 2005 04:58:29, gcc: 3.4.2 (mingw-special)
Input #0, avi, from 'Getaway In Stockholm 4 CD2.avi':
Duration: 01:16:56.1, start: 0.000000, bitrate: 1267 kb/s
Stream #0.0: Video: msmpeg4, 480x368, 29.97 fps
Stream #0.1: Audio: mp3, 48000 Hz, stereo, 142 kb/s
Must supply at least one output file
Der erste Teil bezieht sich auf die EXE selber, ist also unwichtig. Interessant wird's ab Input #0. Zunächst einmal wird angezeigt, dass es sich tatsächlich um ein AVI handelt (könnt ja auch was anderes sein, Dateiendungen müssen nicht immer korrekt sein). Dann die Länge des Streams, wann startet der Stream, die durchschnittliche Bitrate. Weiterhin stellt FFMPEG fest, dass die Datei aus 2 Streams besteht. Stream 0 (in der EDV ist das erste Element vom Index her immer 0) ist der Videostream.
Er liegt als msmpeg4 (besonderes Microsoft MPEG-Format) vor in der Auflösung 480x368 und einer Framerate von 29.97, was uns verrät, dass es sich hier wahrscheinlich um ein NTSC-Film handelt. Stream 1 (also der 2.) ist der Audiostream, der liegt als MP3 vor in 48000Hz, 142kB/s und in Stereo.
Schön, was machen wir nun damit?! Durch Probieren hab ich festgestellt, dass es in den meissten Fällen bei den heruntergeladenen Filmen reicht, die in SVCD-konforme Formate zu konvertieren. Dazu gibt es zwei Möglichkeiten:
1. über die Option -target format, wobei format ersetzt wird durch pal-svcd. Es gibt noch weitere vordefinierte Zielformate, die gängisten sind vcd, svcd, pal-vcd, pal-svcd, ntsc-vcd, ntsc-svcd, dvd, pal-dvd und ntsc-dvd. Durch diese Option werden durch FFMPEG bestimmte Voreinstellungen gemacht, die andere Optionen, die den
Voreinstellungen widersprechen, ausser Kraft setzen. Ich hab's ausprobiert, allerdings bin ich mit dem Ergebnis nicht zufrieden gewesen. So wurde z.B. nicht die Aspect Ratio gesetzt, was u.U. bei einigen DVD-Authoringprogrammen zu Problemen führen kann. Der MPC hat die Filme auf Grund dessen verzerrt angezeigt. Obwohl es mehr Tippaufwand bedeutet, bin ich dazu übergangen, Variante 2 nur noch zu benutzen:
ffmpeg -i "Getaway In Stockholm 4 CD2.avi" -vcodec mpeg2video -r 25 -s 480x576 -aspect 4:3 -sameq -hq -acodec mp2 -ab 128 -ar 44100 "c:\dBox\Getaway In Stockholm 4 CD2.ts"
- -i steht für Inputstream, der zu konvertierende Film also.
- -vcodec format definiert, in welches Videogrundformat konvertiert werden soll, in diesem Fall mpeg2video, da dies SVCD-konform ist.
Es gibt eine Menge mehr Formate, wenn ihr wissen wollt, welche Formate FFMPEG beherrscht, gebt FFMPEG -formats ein, dann werden alle möglichen Formate aufgelistet zusammen mit u.a. einer Angabe, ob es decodiert bzw. encodiert werden kann (die ersten beiden Buchstaben) und ob es sich um ein Video oder Audioformat handelt (3. Buchstabe). - -r 25 steht für die PAL-konforme Bildwiederholrate von 25 Bildern/sek.
- -s 480x576 steht für die Auflösung, für DVD nach PAL-Norm würde man 720x576 eintragen.
- -aspect 4:3 setzt das Bildschirmverhältnis. Ohne diese Option enthält der resultierende Stream kein aspect ratio Flag, was auf dem PC zu einer verzerrten Wiedergabe führt, zudem meckern einige DVD-Authoringprogramme, wenn das Flag im Stream fehlt.
- -sameq steht dafür, dass der Zielstream eine äquivalente Qualität zum Quellstream aufweisst (Same Quality). Ich hab versucht, dass über das setzen eigener Bitraten hinzubekommen, aber ich gebe gerne zu, dass die Ergebnisse immer schlechter waren als mit der gesetzten Option -sameq.
Also warum kompliziert wenn's einfach geht?! Tatsache ist, dass der Zielstream nie schlechter geworden ist als das Ausgangsmaterial, und mehr will man ja auch nicht. - -hq steht für High Quality. Das soll sich nochmals auf die Qualität des Zielstreams positiv auswirken. Ich hab die Option auch mal weggelassen und konnte ehrlich gesagt keinen Unterschied feststellen, aber schaden tut's auch nicht, und da es nicht viel zu tippen ist, lasse ich es immer drin.
Der Videoteil ist damit abgeschlossen. Jetzt kommen die Optionen für den Audiostream. - -acodec mp2 es gilt das Gleiche wie für vcodec. Ich nehme mp2, weil das SVCD-konform ist.
- -ab 128 steht für die Bitrate in kbits/s des Audiostreams. Hier weiche ich ein wenig vom SVCD-Standard ab, was aber nicht schlimm ist. Standard für SVCD und DVD wäre 192
- -ar 44100 steht für die Frequenz in Hz. Auch hier ist es nicht ganz Standard, der ist normalerweise 48000Hz
Nach Drücken der Entertaste erscheinen folgende Meldungen:
ffmpeg version 0.4.9-pre1, build 4743, Copyright (c) 2000-2004 Fabrice Bellard configuration: --enable-mp3lame --enable-vorbis --enable-faad --enable-faac --enable-xvid --enable-mingw32 --enable-a52 --enable-dts --enable-pp --enable-gpl --enable-memalign-hack
built on Feb 22 2005 04:58:29, gcc: 3.4.2 (mingw-special)
Input #0, avi, from 'Getaway In Stockholm 4 CD2.avi':
Duration: 01:16:56.1, start: 0.000000, bitrate: 1267 kb/s
Stream #0.0: Video: msmpeg4, 480x368, 29.97 fps
Stream #0.1: Audio: mp3, 48000 Hz, stereo, 142 kb/s
Output #0, mpegts, to 'c:\dBox\Getaway In Stockholm 4 CD2.ts':
Stream #0.0: Video: mpeg2video (hq), 480x576, 25.00 fps, q=2-31, 200 kb/s
Stream #0.1: Audio: mp2, 44100 Hz, stereo, 128 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
frame= 2997 q=0.0 size= 53108kB time=119.8 bitrate=3630.3kbits/s
Neben dem schon bekannten Input-Teil werden nun Infos zum Zielstream angezeigt. Ich erläutere die jetzt nicht mehr, letztlich dient es der Kontrolle, ob man auch alles richtig eingegeben hat. Interessant ist jetzt nur noch die letzte Zeile. Sie zeigt Infos zum laufenden Konvertierungsprozess an. Die Bedeutungen:
- frame=xxxxx - Anzahl bereits verarbeiteter Frames
- q=0.0 - ???
- Size=xxxxxxxxkB - momentane Größe der Ergebnisdatei
- time=xxx.x - momentane Länge des Zielstreams
- bitrate=xxxx.xkbits/s - Durchschnittliche Bitrate des bis dahin erstellten Zielstreams.
Natürlich ist die Dauer der Konvertierung auch vom PC abhängig, aber im Vergleich zu TMPGEnc2.5 ist FFMPEG um ein vielfaches schneller. Mit TMPGEnc2.5 hätte ich für die Konvertierung in ein SVCD-konformes Format ca. 2-3 Stunden gebraucht und das mit einem 3.2 GHz Rechner.
Und dann muss ich das Ergebnis ja noch in TS umwandeln, mit FFMPEG hab ich also noch einen Arbeitsschritt gespart.
Für's erste soll dies genügen. In einem weiteren Teil will ich dann noch versuchen zu erklären, wie man einen 4:3 Film in einen 16:9 Film und genauso einen Cinemascope-Film in 16:9 Film mit Hilfe von FFMPEG konvertiert.
Aber bis dahin wünsche ich viel Spass beim Ausprobieren!
P.S.: Wer einen so langen Atem hatte und bis hierhin durchgehalten hat, für den hab ich hier noch die Windows-Binary von FFMPEG.