Videohokuspokus mit ffmpeg
Beispiel 6: Audiocodecs
Ich möchte ein wav (=unkomprimiertes) Audiofile in mp3 oder oggvorbis konvertieren.Grundsätzlich genügt für mp3:
ffmpeg -i sound.wav sound.mp3Allerdings ist die default Audiobitrate bei ffmpeg 64kbit/s. Das ist sehr schlechte Audioqualität. Deshalb setze ich die Bitrate auf 192kbit/s (sehr gut).
ffmpeg -i sound.wav -ab 192k sound2.mp3Für oggvorbis funktioniert das ganz ähnlich.
ffmpeg -i sound.wav sound.oggEinen Unterschied zu mp3 gibt es beim Setzen der besseren Audioqualität.
ffmpeg -i sound.wav -aq 10 sound2.ogg-aq 10 setzt die Audioqualität (oggvorbis hat eine variable Bitrate).
Was es mit -aq auf sich hat, wird auf www.vorbis.com erklärt (englisch).
Vergleichen wir doch mal die Dateigrößen (Das Musikstück ist 2min 50s lang).29M sound.wav 4,1M sound2.ogg 4,0M sound2.mp3 1,4M sound.mp3 1,2M sound.ogg
Wie man ID3 Tags mit ffmpeg setzen kann, habe ich tatsächlich auch noch heraus gefunden.
-title der Titel des Musikstücks-author der Autor
-album das Album
Natürlich ist ffmpeg unpraktisch, wenn man eine ganze CD rippen will, aber zwischendurch schnell mal was konvertieren geht prima. Vor allem wenn man Videocodec und Audiocodec in einem Rutsch bearbeitet.
Beispiel 7: Filme aneinander hängen
Ich möchte mehrere kurze Filme (Animationen) aneinanderhängen zu einem längeren Film:Wichtig dabei ist, dass alle die gleichen Bitraten, Auflösungen, Codecs und Frameraten haben müssen!
Leider funktioniert das nur mit mpeg1 und mpeg2 und ist außerdem verlustbehaftet, weil transcodiert werden muss.
cat film1.mpeg film2.mpeg > film_t.mpeg ffmpeg -i film_t.mpeg -sameq langfilm.mpeg
Ja, das gute alte cat. Ihr habt richtig gesehen.
Der zweite Schritt setzt die Timestamps wieder richtig.
Zwei überaus gefinkelte Methoden, wie Filme aneinandergehängt werden können, werden hier beschrieben:
1) mit mkfifo und/oder yuv4mpegpipe: ffmpeg.org/faq.html
2) mit redirects und image2pipe: www.wlug.org.nz/FFmpeg
Beispiel 8: Tonspur extra bearbeiten
Ich möchte die Tonspur eines Filmes getrennt nachbearbeiten (mit Audacity), die Videospur aber unverändert lassen. Zuerst extrahiere ich den Sound.ffmpeg -i film.mp4 -vn audio.wav
Als Ausgabeformat wähle ich das unkomprimierte wav. Der original Audiocodec des Filmes wäre mpeg4aac,
Audacity kann aber mit .aac nicht umgehen, da das ein proprietäres Format ist.
(Update: konnte!, Audacity nimmt inzwischen ffmpeg zu Hilfe.)
ffmpeg kommt damit klar, wenn libfaac einkompiliert ist (--enable-libfaac).
Außerdem brauche ich die Videospur ohne Audio in einem Extrafile.
ffmpeg -i film.mp4 -an -vcodec copy film_stumm.mp4-an ohne Ton
-vcodec copy die Videospur unverändert kopieren
Nachdem ich das audio.wav mit Audacity bearbeitet und als mp3 exportiert habe (audio.mp3), setze ich die stumme Videospur und das neue Soundfile zusammen.
ffmpeg -i film_stumm.mp4 -i audio.mp3 -vcodec copy -async 10 -ab 128k newfilm.mp4
ffmpeg konvertiert die Audiospur automatisch wieder in mpeg4aac.
-vcodec copy das Video einfach nur kopieren-async 10 durch die (mehrmalige) Änderung des Codecs ist das Soundfile ein paar Sekunden länger als der Film. ffmpeg staucht das wieder zurecht, damit Bild und Ton synchron bleiben.
-ab 128k die Audio-Bitrate (Qualität)
Beispiel 9: anamorphe Filme korrigieren
Hasst Ihr das nicht auch, wenn 16:9 Filme auf 4:3 gezerrt werden (ohne Balken) und alle Gesichter befremdend nach Bananen oder Gurken aussehen? Man bezeichnet das als anamorph. Mir persönlich sind die schwarzen Balken oben und unten lieber.Hier habe ich z.B. so einen Problemfall: Das Video hat eine Auflösung von 352x288px. Das ist nicht wirklich 4:3, aber fast. Damit das Ganze halbwegs ein Seitenverhältnis von 16:9 kriegt, ändere ich die Auflösung auf 352x200. Dann sehen die Gesichter auch wieder menschlich aus.
ffmpeg -i banane.flv -s 352x200 -acodec copy -sameq normal.flv-s 352x200 das neue Seitenverhältnis
-acodec copy die Tonspur unverändert kopieren
-sameq die Videoqualität beibehalten
Schlussendlich sollte der ganze Film aber doch wieder ein Seitenverhältnis von 4:3 bekommen, nur eben mit Balken.
Kopfrechnen:
4:3=1,333333333
352:1,333333333=264,000...
(264-200):2=32
ffmpeg -i banane.flv -s 352x200 -padtop 32 -padbottom 32 \ -acodec copy -sameq normal2.flv-padtop 32 oben einen Balken von 32 Pixel Höhe dazu
-padbottom 32 unten auch
Beispiel 10: Film archivieren
Eine DVD rippen als Backup, oder um z.B. einen Home Media Server zu betreiben.Was ist nötig:
Ein DVD Laufwerk :)vobcopy und ffmpeg
ffmpeg mit folgenden Libraries:
- libmp3lame
- liba52
Eine wahnsinns CPU oder Geduld.
Zuerst folgende Programme installieren:
libdvdread und vobcopy
Vobcopy brauchen wir, um die .VOB Dateien aus der DVD zu extrahieren. Vobcopy benötigt dazu wiederum libdvdread.
vobcopy -I vobcopy -m -o /home/ein/ordner/
Mehr zu vobcopy mit man vobcopy
mplayer dvd://2 -dumpstream -dumpfile /home/mein/ordner/title2.vobDas kopiert den zweiten Titel der DVD auf Festplatte.
In den Arbeitsordner wechseln und gleich nochmal neugierig sein.
ffmpeg -i VTS_01_1.VOB
Input #0, mpeg, from 'VTS_01_1.VOB':
Duration: 00:24:47.5, start: 0.360000, bitrate: 5224 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x576
[PAR 64:45 DAR 16:9], 6430 kb/s, 25.00 fps(r)
Stream #0.1[0x80]: Audio: liba52, 48000 Hz, stereo, 192 kb/s
Stream #0.2[0x81]: Audio: liba52, 48000 Hz, stereo, 192 kb/s
Stream #0.3[0x21]: Subtitle: dvdsub
Zum Testen brauche ich nur die ersten 20 Sekunden des Filmes, dann kann ich mich an mein Wunschergebnis annähern, ohne ganze Tage davor zu sitzen.
ffmpeg -i VTS_01_1.VOB -t 0:0:20 test.aviDieses test.avi schaue ich mir mit ffplay, mplayer und totem an.
Tatsächlich ist der Film scheußlich verzerrt (16:9 auf 4:3) und die Qualität ist zu schlecht. Nach vielen Versuchen, finde ich die richtigen Einstellungen.
ffmpeg -i VTS_01_1.VOB -b 900k -s 640x480 -aspect 4:3 \ -acodec libmp3lame -ab 128k -async 50 ausgabe.avi -padtop 60 -padbottom 60-b 900k Videobitrate von 900kbit/s, ein Kompromiss zwischen Qualität und Dateigröße
-s 640x480 die Auflösung in Pixel
-aspect 4:3 das Seitenverhältnis muss ich diesmal angeben, um das originale zu überschreiben
-acodec libmp3lame Audiocodec mp3
-ab 128k Audiobitrate (default wäre 64kbit/s)
-async 50 stellt sicher, dass Bild und Ton synchron bleiben (der Audiocodec ändert sich ja)
-padtop 60 oben ein Balken von 60 Pixel Höhe
-padbottom 60 unten auch
Eine Anmerkung zur Zeit: Zum Umwandeln des 24 min 47 s langen Filmes benötigte ffmpeg mit meiner 1.30GHz CPU ca. 17 min. Das ist doch gar nicht so schlecht.
Zur Dateigröße:
VTS_01_1.VOB 927MB ausgabe.avi 185MBPrima!