Video- und Audio-Bearbeitung: FFmpeg
Update Dezember 2018![Logo der Motion Picture Expert Group Logo MPEG](Bilder/Video-Mpeg.gif)
Dir ist ja sicherlich auch schon aufgefallen, dass es Multimedia-Dateien in den verschiedensten Formaten gibt. Audios kommen als "wav", "wma", "mp3" und "ogg" daher, um nur die wichtigsten zu nennen. Und bei Videos sieht es noch schlimmer aus: "mpeg", "wmv", "flash", "mp4", "h264", "webm", "mov", "avi" usw. Das Ganze wird bei Videos garniert durch mindestens 2 verschiedene Ansichtsformate (4:3 und 16:9) und alle möglichen Bildgrößen von 160x120 bis zu 1920x1080 (siehe auch hier.). Es wird nicht dadurch leichter, dass die Geräte, die Filme abspielen können, verschiedene Bildschirmgrößen haben und Filme nicht in jedem Format akzeptieren.
![MP3-Logo Logo MP3](Bilder/Audio-MP3.png)
Die Krönung habe ich hier in Form eines MP3-Players (Archos), der Filme zwar abspielt, aber nur dann, wenn sie die Bildgröße 220x176 Pixel haben, das Video in "xvid" mit dem Qantisierer h263 bei einer Bitrate von 300kB vorliegt und ein Ton in MP2 und einer Abtastrate von 44100 und einer Bitrate von 64k dabei ist. Überdies muss das Bild um 180 Grad gedreht und gespiegelt sein. Noch Fragen? Glücklicherweise spielen heutige Smartphones so ziemlich alle Videos ab, die in einem MP4-Container daherkommen ...
![FLAC-Audio-Logo Logo FLAC-Audio](Bilder/Audio-Flac.png)
Dein Telefon kann Videos, Dein Fotoapparat auch, vielleicht hast Du eine Videokamera. Wie heißen die Dateien, die aus den Geräten auf Deinem Rechner landen? Nein, der Dateiname ist uninteressant, die Dateiendung ist wichtig. AVI? MOV? 3GP? MP4? Wenn Du es weißt, dann heißt das noch nicht, dass Du über den Inhalt der Dateien Bescheid weißt. Oben habe ich nämlich ein paar Dinge durcheinander gewürfelt: ein paar von den Bezeichnungen kennzeichnen einen Behälter (in der Fachsprache "Container") und ein paar sagen aus, wie das Video kodiert ist.
![Opus-Logo Logo Opus](Bilder/Audio-Opus.png)
Ich mache es kurz und beschränke mich auf die wichtigsten Begriffe/Formate:
- MOV, AVI, MPG, OGG, MKV, FLV und MP4 sind Behälter für Video, Audio und mehr (Untertitel z.B.). Auf dem Behälter steht, was drin ist. Natürlich nur für Computersoftware lesbar. Es gibt allerdings Vereinbarungen, was normalerweise drin sein sollte ...
- mpeg2, mpeg4, h264, h265, vp8, flv, xvid und wmv sind Kodierverfahren, beschreiben also die Art und Weise, wie das Video digital vorliegt.
![Quicktime-Logo Logo Quicktime](Bilder/Video-Quicktime.png)
Reine Audiodateien fallen schon mal aus den Erklärungen weitestgehend weg, denn ein Ton im Format "wav" wird abgespeichert im Behälter ".wav", "mp3"-kodiert --> ".mp3", "ogg"-kodiert --> ".ogg".
Wozu das Ganze?
![Xvid-Logo Logo Xvid](Bilder/Video-Xvid.png)
Nehmen wir mal an, Du hast mit Deinem Fotoapparat einige Videos von Omas Geburtstag gedreht und möchtest Oma eine DVD schenken mit den Filmen drauf. Dann hast Du schon mal Arbeit, denn Deine Knipskiste liefert garantiert nicht das Format, das zwingend auf eine DVD muss. Ausweg: Du benutzt Schnittsoftware, mit der Du die Filmchen aneinander hängst und die anschließend das fertige Video auf DVD brennt. Glück gehabt ...
![H264-Logo Logo H264](Bilder/Video-H264.png)
Wenn Du irgendetwas mit Video- und Audio-Dateien machen möchtest, dann nimmst Du am Besten ffmpeg und Co.. Das mit dem "und Co." liegt daran, dass es einen zweiten Entwicklungszweig namens "libav" gibt, der genau das gleiche macht und genauso arbeitet. Selbst die Webseiten sind sich zum Verwechseln ähnlich: ffmpeg und libav. Ich werde im Folgenden immer "ffmpeg" schreiben, weil der Name sehr geläufig ist, aber es gilt alles auch für "avconv" von libav.org.
Mit "irgendetwas" meine ich:
- Aufnahme vom Bildschim, Webcam, Soundkarte, TV-Karte, von anderen Geräten
- Wiedergabe von allen Video- und Audiodateien
- Streamen ins Netzwerk
- Umwandeln in fast jedes erdenkliche Format
![DVD-Logo Logo DVD](Bilder/Video-DVD.png)
Oder Du wandelst das Material vom Fotoapparat mit Hilfe von ffmpeg um in das Format, das sich auf DVD brennen lässt. Das folgende Beispiel ist mit eins der angenehmsten, denn ffmpeg (bzw. avconv von libav) hat dafür ein Umwandel-"Profil" parat: "target=dvd".
Ich habe diese Zeile künstlich auseinander gezogen, damit deutlich wird, dass die Zeile aus 4 Teilen besteht. Normalerweise reicht zum Trennen ein Leerzeichen. Jetzt zu den 4 Teilen:
ffmpeg
ist der Befehl-i DeinFilm.ext
ist die Anweisung den Input "DeinFilm.ext" zu verarbeiten-target
ist ein Profilname, mit dem ffmpeg alles, was zum Umwandeln wichtig ist, parat hat.pal-dvd
bezeichnet das Profil, in Europa ist das "Pal"-System angesagt und "dvd" ist selbstredendAusgabeDatei.mpg
muss ich nicht erläutern.
Ich kann das Profil auch ersetzen durch Einzelanweisungen. Das sieht dann so aus:
Das erläutere ich jetzt mal näher, denn so sieht grundsätzlich jede Wandlung aus und daraus lässt sich die Arbeit mit ffmpeg gut demonstrieren.
dies ist der Befehl
der Film, der gewandelt werden soll
--- jetzt folgt die Anweisung für das Bild
dieses Videoformat wird benutzt
diese Bildgröße bei PAL
die Bildfrequenz bei PAL
der Videodatenstrom maximal
das Seitenverhältnis
--- und jetzt die Anweisung für den Ton
dieses Audioformat wird benutzt
mit 2 Audiokanälen
und dieser Abtastrate
der Audiodatenstrom maximal
die Ausgabedatei
Eigentlich besteht eine Befehlszeile also aus 5 Teilen: der eine Teil "target" wird zu 2 Teilen - eine Anweisung zur Umwandlung des Bildes und eine Anweisung zur Umwandlung des Tons. Möchtest Du nur ein Bild als Ausgabe, dann schreibst Du für den Ton -an
hin (was für "audio no" steht) und im umgekehrten Fall -vn
.
In den beiden Beispielen oben ist das Ergebnis gleich. Und es ist egal, was Dein Apparat für Filme macht, ob es HD-Videos sind, ob sie im MOV-Container abgespeichert werden, ob mit 30 Bildern/Sekunde und so fort. Was das im Paket enthaltene Programm ffplay
abspielen kann, wird umgewandelt! Übrigens: alle Einstellungen einer Ursprungsdatei werden in die Ausgabedatei übernommen, wenn nicht ausdrücklich eine Anweisung zum Ändern in der Befehlszeile auftaucht. Hat z.B. das Ausgangsvideo ein Seitenverhältnis von 4:3 und der Option -aspect
taucht beim Umwandeln nicht auf, dann hat das Ausgabevideo das gleiche Seitenverhältnis.
![DivX-Logo Logo DivX](Bilder/Video-Divx.png)
Datenstrom
Ich muss an dieser Stelle auf den Video- und Audio-Datenstrom eingehen, denn viele können damit nicht viel anfangen. Schau zuerst mal hier rein: Dann geht es weiter:
Die Bestimmungen für das Video auf einer DVD besagen, dass der Datenstrom maximal 9000kB/Sekunde betragen darf. Dann hätte das Video die bestmögliche Qualität. Ich habe oben "-b 8000" für das Bild hingeschrieben, das ist sehr gute Bildqualität. Wenn diese Rate kleiner gewählt wird, leidet die Qualität, aber die Dateien werden kleiner und es passt mehr Filmlänge auf die DVD. Das gleiche gilt für die Audio-Datenrate, 192K entspricht in etwa CD-Qualität. Beachte: beim Videodatenstrom kannst Du die Zahl frei wählen, beim Audiodatenstrom muss die Zahl ein Vielfaches von 32 sein!
Szenenwechsel. Wo und wie kannst Du Hilfe bekommen, wenn Du mehr machen willst, als ich Dir hier zeige? Antwort: Vielleicht in irgendwelchen Foren, aber auf keinen Fall bei ffmpeg.org oder libav.org. Denn: die Fähigkeiten, die das Programm verpasst bekommen hat, übersteigen die Dokumentationsfähigkeiten aller Beteiligten um Zehnerpotenzen. Mit anderen Worten: es gibt keine anständige verständliche, wirklich hilfreiche Dokumentation, wie es sie z.B. bei
Gimp gibt. Was Du tun kannst: rufe ffmpeg auf mit
ffmpeg --help
. Solltest Du Dich wirklich mit der Ausgabe dieses Befehles beschäftigen wollen, dann sieh zu, dass Du genug Zeit und zu trinken hast ...
Solltest Du dann noch Zeit haben, dann gib in der Konsole den Befehl man ffmpeg
ein und wenn Du dann noch nicht mit Deinem Leben abgeschlossen hast, dann gibts ja noch die "Dokumentation" auf ffmpeg.org.
Zurück zu unserer Seite. Im folgenden zeige ich in Kurzform die Umwandlung von Audio und Video in verschiedene Formate. Du hast freie Hand, welche Audiocodecs Du mit welchen Videocodecs in welche Behälter packst. Allerdings gibt es bestimmte "Vorschriften" und diverse Abmachungen. Zu den Vorschriften gehört: auf einer DVD muss das Bild im mpeg2-Verfahren kodiert sein, der Ton darf im ac3-Format und/oder im mp2-Codec dabeisein. Dabei muss das Bild (bei uns in Europa) 720 Pixel breit und 576 Pixel hoch sein und die Bildfrequenz beträgt 25 Bilder/Sekunde. Sonst spielt ein handelsüblicher DVD-Player das Ergebnis nicht ab. Für Blue-Ray-Scheiben gilt: Das Video wird kodiert im Verfahren H.264/MPEG-4 AVC
, der Ton wird wie bei DVD kodiert, die Bildgrößen dürfen varrieren von 720x576
bis 1920x1050. Die weitere Spezifikation ist hier uninteressant. Zu den Abmachungen gehört, in welchen Containern welche Tonkodierung mit welche Bildkodierung normalerweise zusammen zu finden sind. Eine Liste führt hier zu
weit, mach Dich bei Interesse schlau bei Wikipedia. Eine interessante Abmachung gibt es darüber hinaus: wenn Audio allein vorliegt, dann ist das analoge Tonsignal 44100mal in der Sekunde abgetastet worden, im Zusammenhang mit Bild 48000mal.
Hier die Liste der wichtigsten Codecs. Wenn eine Multimediadatei auf einem Computer abgespielt werden soll, dann kannst Du so ziemlich alles mixen ...
Audio/Video | Format | Kodierbefehl | Behälter |
---|---|---|---|
Audio | wav | pcm_s16le | CD, MOV, AVI |
Audio | mp3 | libmp3lame | MP3, MP4, WebM, diverse Player |
Audio | mp2 | mp2 | MPG, DVD, DVB, M2TS |
Audio | ogg | libvorbis | WebM, MKA, diverse Player |
Audio | wma | wmav2 | WMA, WMV, MKA |
Audio | flac | flac | FLAC (verlustfrei), wenige Player |
Video | mpeg | mpeg2video | MPG, MPEG, M2TS, M2T, DVD, DVB, MKV |
Video | h264 | libx264 | MP4, MOV, AVI, MKV |
Video | h265 | libx265 | MP4, MOV, AVI, MKV (neu) |
Video | xvid | libxvid | MP4, MOV, AVI |
Video | mp4 | mpeg4 | MP4, AVI, MOV, MKV |
Video | flash | flv | Flash-Video |
Video | webm | libvpx | Web-Media |
Video | webm | libvpx-vp9 | Web-Media (relativ neu) |
Video | theora | libtheora | OGG, OGM, MKV |
Video | wmv | wmv2 | WMV, AVI, MKV |
Video | dv | dvvideo | Mini-DV |
ffmpeg -codecs
Wenn Du jetzt ein Video umkodieren willst, musst Du wissen, wofür es bestimmt ist und welches Containerformat dafür am Besten geeignet ist. Womöglich verlangt ein Gerät auch noch eine spezielle Zusammenstellung von Codecs und bestimmte Datenströme. Das Schwierige dabei ist in der Regel, heraus zu bekommen, was verlangt wird (siehe der MP3-Player oben). Dazu noch zwei Beispiele:
1. für das Telefon Samsung SGH F480
2. für den digitalen Bilderrahmen Aiptec-Picasso:
Vergleiche das mal mit der ausführlichen Zeile oben. Du wirst bemerken, dass noch eine Befehlsabteilung dazu gekommen ist:
Diese Anweisung legt das Format des Ausgabecontainers fest. Im Prinzip ist das unwichtig, denn ffmpeg versucht, aus der Dateiendung das richtige Format zu "erraten". Zur Sicherheit habe ich es hier benutzt und so kann ich diese Festlegung auch zeigen. Sie ist in einem anderen Zusammenhang nützlich: lesen von Bildschirm oder Webcam zum Beispiel.
Jetzt die Wandlung eines Audios zum Beispiel von wav nach mp3:
Jetzt folgen noch ein paar nützliche Optionen, die ich immer mal wieder benutze:
nützlich, wenn das Ausgangsmaterial eine TV-Aufzeichnung ist
legt die Ausgabequalität im Vergleich zur Quelldatei fest:
2=am Besten, 31=am Schlechtesten
Zur Verbesserung der Qualität kann man in 2 Durchgängen
kodieren, Beim ersten Mal steht hier "1", beim zweitenmal "2"
copy nach -acodec oder -vcodec: der Datenstrom wird kopiert
legt für den Ton die Lautstärke fest: 0 bis 256
Zum vorläufigen Abschluss noch die Information, dass Du nicht unbedingt alles mit den Fingern eintippen musst, denn es gibt jede Menge grafische Oberflächen für ffmpeg, die sich mit der Maus bedienen lassen und die alle eine Reihe "Presets" mitbringen, also Voreinstellungen für bestimmte Anwendungsfälle. Beispiele für Presets sind die beiden Kodierbeispiele etwas weiter oben. Und diese Presets kannst Du mit etwas Kenntnis selbst ergänzen. Letzteres ist auch der Grund, warum ich die grafischen Oberflächen erst jetzt erwähne: ohne Grundkwissen kannst Du sie nicht bedienen. Es sind nach meiner Kenntnis:
- Avidemux - bei diesem Programm ist ffmpeg mit "eincompiliert", Schwerpunkt ist die Filterung von Videos
- Winff - irreführender Name, auch bei Linux heißt es so
- HandBrake - Schwerpunkt liegt auf mp4/h264/xvid-Kodierung
- traGtor - Hat eine schöne übersichtliche Oberflache und viele Presets, nicht nur für Ubuntu ;-)
Update vom 27.12.2011
Die Entwicker haben ein neues Konzept eingeführt, das es einfacher macht, mit mehr als einer Bild- und Tonspur umzugehen. Hier meine neuesten Erkenntnisse.
Es gibt die Anweisungen -vcodec und -acodec nicht mehr lange. Jetzt schon funktioniert die neue Anweisung -codec bzw. kurz -c, die in folgener Art und Weise benutzt wird:
wie bisher
-vcodec (codec)
dito, die (zahl) bestimmt die Videospur, wenn mehr als eine, bei 0 beginnend
wie bisher
-acodec (codec)
dito, die (zahl) bestimmt die Audiospur, wenn mehr als eine, bei 0 beginnend
kopiert alle Video- und Audiodatenströme in die Ausgabedatei
kopiert den Videodatenstrom (wahlweise wieder mit (zahl) bestimmbar)
kopiert den Audiodatenstrom (wahlweise wieder mit (zahl) bestimmbar)
Die Umstellung betrifft auch die Bitrate:
Die Qualität der Datenströme ist hier einstellbar, für Audio und Video getrennt und wahlweise kann jeder Datenstrom getrennt und für sich eingestellt werden.
Statt der Bitrate kannst Du auch die Qualität des Videos bestimmen
Qualität des Videos: 2 am Besten, 31 am Schlechtesten
Es gibt auch die Option, zu bestimmen, welche der Datenströme von welcher Eingabedatei (in diesem Fall die erste Datei, also Nummer 0)in der Ausgabedatei erscheinen sollen (bei DVB-S sind oft eine Videospur, 3 Tonspuren und 2 Untertitelspuren versammelt). Das gab es bisher schon, war aber vergleichsweise umständlich zu bestimmen. Jetzt:
dies ist die Option für sich
übernimm alle Datenströme
speichere alle Bildspuren (meist gibt es nur eine)
speichere alle Audiospuren
speichere Audiospur (zahl), Zählung fängt bei 0 an!
speichere die Untertitelspuren
speichere die Untertitelspur (zahl)
speichere alle Spuren außer der Tonspur (zahl), beachte das Minuszeichen vor der zweiten Null
speichere alles außer den Untertitelspuren
speichere alles außer der Untertitelspur (zahl)
Mit einer dieser Optionen kann man prima z.B. aus eine Musikalfilm die 2.Tonspur für den MP3-Player abzwacken:
Das nächste Beispiel gilt für Aufzeichnungen vom HD-Filmen. Deren Codierung enthält nur alle etwa 11 Sekunden ein Vollbild und das ist sehr ungünstig zum Schneiden. Deshalb wandle ich sie um. Hier kann ich schön die -map-Option darstellen. ffmpeg -i filmname.ext gibt nur die Infos zum Film aus (Arte, deswegen deutsch und französisch):
ffmpeg -i "Reiseportraits.m2t" Input #0, mpegts, from 'Reiseportraits.m2t': Duration: 00:00:50.68, start: 11861.482011, bitrate: 13030 kb/s Program 10302 Stream #0:0[0x13f7]: Video: h264 (High), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 54.33 fps, 50 tbr, 90k tbn, 100 tbc Stream #0:1[0x13f8](deu): Audio: mp2 48000 Hz, stereo, s16, 192 kb/s Stream #0:2[0x13f9](fra): Audio: mp2 48000 Hz, stereo, s16, 192 kb/s Stream #0:3[0x13fa](deu): Subtitle: dvb_teletext Stream #0:4[0x13fb](deu): Subtitle: dvb_subtitle (hearing impaired) Stream #0:5[0x13fc](deu): Audio: ac3 48000 Hz, stereo, s16, 448 kb/s Stream #0:6[0x13fe](fra): Subtitle: dvb_subtitle (hearing impaired)
ich möchte in dem gewandelten Film alle Tonspuren haben, die Untertitel interessieren mich nicht, auch nicht der Tetelext. Deshalb lautet der Befehl:
ffmpeg zeigt mir in der Ausgabe das Mapping:
Stream mapping: Stream #0:0 -> #0:0 (h264 -> libxvid) Stream #0:1 -> #0:1 (copy) Stream #0:2 -> #0:2 (copy) Stream #0:5 -> #0:3 (copy)
Und der fertige Film sieht so aus:
Output #0, avi, to 'reise.avi': Metadata: ISFT : Lavf54.29.104 Stream #0:0: Video: mpeg4 (XVID / 0x44495658), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 tbn, 25 tbc Stream #0:1(deu): Audio: mp2, 48000 Hz, stereo, 192 kb/s Stream #0:2(fra): Audio: mp2, 48000 Hz, stereo, 192 kb/s Stream #0:3(deu): Audio: ac3, 48000 Hz, stereo, 448 kb/s
Alles klar?
Ich werde versuchen, diesen Text "up to date" zu halten. Weiterführende Links:
- Die Dokumentation von ffmpeg (vergiss es!)
- Das ffmpeg-Wiki (Beispiele)
- Das Multimedia-Wiki (nur für Insider!)
Viel Spaß beim Rumspielen!