Es gibt viele Open-Source-Tools zum Bearbeiten, Optimieren und Konvertieren von Multimedia-Dateien in genau das, was Sie brauchen. Tools wie Audacity oder Handbrake sind fantastisch, aber manchmal möchte man eine Datei einfach nur schnell von einem Format in ein anderes umwandeln. Hier kommt FFmpeg ins Spiel.
FFmpeg ist eine Sammlung verschiedener Projekte zur Bearbeitung von Multimedia-Dateien. Es wird oft hinter den Kulissen in vielen anderen medienbezogenen Projekten verwendet. Trotz seines Namens hat es nichts mit der Moving Picture Experts Group oder den unzähligen Multimediaformaten zu tun, die sie geschaffen hat.
In diesem Artikel werde ich FFmpeg über das Kommandozeilenprogramm ffmpeg verwenden, das nur ein kleiner Teil des FFmpeg-Projekts ist. Es ist auf vielen verschiedenen Betriebssystemen verfügbar und ist in einigen Betriebssystemen standardmäßig enthalten. Es kann von der FFmpeg-Website oder über die meisten Paketmanager heruntergeladen werden.
FFmpeg ist ein leistungsfähiges Tool, das fast alles tun kann, was man sich mit Multimedia-Dateien vorstellen kann. In diesem Artikel geht es um die Konvertierung von Dateien, daher werden wir nicht in alle Funktionen eintauchen. Bevor wir uns mit der Verwendung von FFmpeg befassen, müssen wir zunächst einen kurzen Blick darauf werfen, was eine Mediendatei genau ist.
Mediendateien
Eine Mediendatei besteht im Großen und Ganzen aus einem Container und seinen Streams. Die Streams enthalten die eigentlichen AV-Komponenten, z. B. Audio oder Video eines Films, und werden mit einer bestimmten Medienkodierung, einem Codec, kodiert. Jeder Codec hat seine eigenen Eigenschaften, Stärken und Schwächen. Der FLAC-Codec eignet sich beispielsweise für hochwertige, verlustfreie Audiodateien, während Vorbis so konzipiert ist, dass es bei der Dateigröße mit MP3 konkurrieren kann, aber eine bessere Audioqualität bietet. Das bedeutet, dass eine FLAC-formatierte Datei viel größer ist als ein Vorbis-Audiostream, aber besser klingen sollte. Keiner von beiden ist von Natur aus besser als der andere, da jeder versucht, unterschiedliche Dinge zu tun.
Der Container ist die Hülle für die Streams. Er stellt eine einzige Schnittstelle dar, mit der Medienplayer und Tools interagieren können. Einige Container sind sehr fortschrittlich und ermöglichen jede Art von Stream, einschließlich mehrerer Video- und Audioströme innerhalb eines einzigen Containers. Die Streams in einem Container müssen jedoch nicht nur aus Audio oder Video bestehen. Verschiedene Container ermöglichen unterschiedliche Streams, z. B. Untertitel, Kapitelinformationen oder andere Metadaten. Es hängt alles davon ab, was der Container zulässt.
Dies ist eine abstrakte Darstellung von Mediendateien und überspringt viele der Unterschiede zwischen Containern. Viele erfordern bestimmte Streams und Metadaten oder schränken die erlaubten Codecs oder Inhalte ein. Diese Erklärung reicht aus, um diesen Artikel zu lesen. Um mehr zu erfahren, klicken Sie auf die obigen Links.
Bitte beachten Sie, dass die Video- und Audiocodierung sehr lange dauern kann. Wenn Sie FFmpeg verwenden, sollten Sie sich darauf einstellen, dass es eine Weile dauern kann.
Grundlegende Konvertierung
Das, was die meisten Leute bei der Konvertierung von Audio und Video stört, ist die Auswahl der richtigen Formate und Container. Glücklicherweise ist FFmpeg ziemlich clever mit seinen Standardeinstellungen. In der Regel wählt es automatisch die richtigen Codecs und Container aus, ohne dass eine komplexe Konfiguration erforderlich ist.
Angenommen, Sie haben eine MP3-Datei und möchten sie in eine OGG-Datei konvertieren:
ffmpeg -i input.mp3 output.ogg
Dieser Befehl nimmt eine MP3-Datei namens input.mp3 und konvertiert sie in eine OGG-Datei namens output.ogg. Aus der Sicht von FFmpeg bedeutet dies, dass der MP3-Audiostream in einen Vorbis-Audiostream umgewandelt wird und dieser Stream in einen OGG-Container verpackt wird. Sie müssen keine Stream- oder Containertypen angeben, weil FFmpeg das für Sie herausfindet.
Das funktioniert auch mit Videos:
ffmpeg -i input.mp4 output.webm
Da WebM ein klar definiertes Format ist, weiß FFmpeg automatisch, welche Video- und Audioformate es unterstützen kann, und konvertiert die Streams in eine gültige WebM-Datei.
Abhängig von dem von Ihnen gewählten Container funktioniert das nicht immer. Zum Beispiel sind Container wie Matroska so konzipiert, dass sie fast jeden Stream verarbeiten können, den man in sie einspeisen möchte, egal ob er gültig ist oder nicht. Das bedeutet, dass der Befehl:
ffmpeg -i input.mp4 output.mkv
zu einer Datei mit denselben Codecs führen kann, die input.mp4 hatte, was nicht unbedingt das ist, was Sie wollen.
Auswahl der Codecs
Was tun Sie also, wenn Sie einen Container wie Matroska verwenden wollen (der fast jeden Stream verarbeiten kann), aber dennoch Einfluss darauf nehmen wollen, welche Codecs in der Ausgabe enthalten sind? FFmpeg ist die Rettung! Sie können die benötigten Codecs mit dem Flag -c auswählen.
Mit diesem Flag können Sie den verschiedenen Codec für jeden Stream festlegen. Um zum Beispiel den Audio-Stream auf Vorbis einzustellen, würden Sie den folgenden Befehl verwenden:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
Das Gleiche kann getan werden, um sowohl den Video- als auch den Audio-Stream zu ändern:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
So wird ein Matroska-Container mit einem VP9-Videostream und einem Vorbis-Audio-Stream erstellt, im Wesentlichen das Gleiche wie der WebM, den wir zuvor erstellt haben.
Der Befehl ffmpeg -codecs gibt jeden Codec aus, den FFmpeg kennt. Die Ausgabe dieses Befehls hängt von der Version von FFmpeg ab, die Sie installiert haben.
Einen einzelnen Stream ändern
Öfter als Ihnen lieb ist, ist die Datei, die Sie haben, teilweise korrekt und nur ein einzelner Stream hat das falsche Format. Es kann sehr zeitaufwendig sein, den richtigen Stream neu zu kodieren. FFmpeg kann in dieser Situation helfen:
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
Dieser Befehl kopiert den Videostream von input.webm in output.mkv und kodiert den Vorbis-Audiostream in ein FLAC. Das Flag -c ist wirklich mächtig.
Ändern eines Containers
Das vorherige Beispiel kann sowohl auf den Audio- als auch auf den Videostream angewendet werden, so dass Sie von einem Containerformat in ein anderes konvertieren können, ohne eine zusätzliche Streamcodierung vornehmen zu müssen:
ffmpeg -i input.webm -c:av copy output.mkv
Beeinflussen der Qualität
Nun, da wir die Codecs im Griff haben, lautet die nächste Frage: Wie stellen wir die Qualität jedes Streams ein?
Die einfachste Methode ist, die Bitrate zu ändern, was zu einer anderen Qualität führen kann, aber nicht muss. Die Fähigkeit des Menschen, zu sehen und zu hören, ist nicht so klar und eindeutig, wie wir gerne glauben würden. Manchmal macht eine Änderung der Bitrate einen großen Unterschied in der subjektiven Qualität. In anderen Fällen ändert sich dadurch nur die Dateigröße. Manchmal ist es sehr schwierig zu sagen, was passiert, ohne es auszuprobieren.
Um die Bitrate eines jeden Streams einzustellen, verwenden Sie die -b-Flagge, die ähnlich wie die -c-Flagge funktioniert, mit der Ausnahme, dass Sie anstelle von Codec-Optionen eine Bitrate einstellen.
Um zum Beispiel die Bitrate des Videos zu ändern, würden Sie es wie folgt verwenden:
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
Dies kopiert das Audio (-c:a copy) von input.webm und konvertiert das Video in einen VP9-Codec (-c:v vp9) mit einer Bitrate von 1M/s (-b:v), alles gebündelt in einem Matroska-Container (output.mkv).
Eine weitere Möglichkeit, die Qualität zu beeinflussen, ist die Anpassung der Bildrate des Videos mit der Option -r:
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
Dies erzeugt eine neue Matroska-Datei, bei der der Audiostream kopiert und die Bildrate des Videostreams auf 30 Bilder pro Sekunde erzwungen wird, anstatt die Bildrate der Eingabe (-r 30) zu verwenden.
Sie können auch die Abmessungen Ihres Videos mit FFmpeg anpassen. Am einfachsten ist es, eine vorgegebene Videogröße zu verwenden:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
Dies ändert das Video in der Ausgabe auf 1280×720, aber Sie können die Breite und Höhe auch manuell einstellen, wenn Sie wollen:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
Dies erzeugt genau die gleiche Ausgabe wie der vorherige Befehl. Wenn Sie in FFmpeg benutzerdefinierte Größen einstellen wollen, denken Sie bitte daran, dass der Parameter Breite (1280) vor der Höhe (720) steht.
Die Anpassung der Bildrate und der Bitrate sind zwei grobe, aber wirksame Techniken, um die Medienqualität zu beeinflussen. Wenn diese Werte sehr hoch eingestellt werden, kann die Qualität einer vorhandenen Quelle nicht verbessert werden, wenn die Qualität bereits niedrig ist.
Die Änderung dieser Einstellungen ist am effektivsten, um einen qualitativ hochwertigen Stream schnell auf eine kleinere Dateigröße zu reduzieren. Das Anpassen der Videogröße verbessert zwar nicht die Qualität, kann aber dafür sorgen, dass das Video besser auf ein Tablet als auf einen Fernseher passt. Die Änderung der Größe eines 640×480-Videos auf 4K wird die Qualität nicht verbessern.
Die Änderung der Qualität Ihrer Dateien ist eine sehr subjektive Angelegenheit, was bedeutet, dass es keine Methode gibt, die jedes Mal funktioniert. Die beste Methode ist, einige Änderungen vorzunehmen und zu testen, ob es für Sie besser aussieht oder klingt.
Modifizieren der Streams
Oft hat man eine Datei, die fast perfekt ist, und man muss nur ein paar Teile abschneiden. Wenn Sie aber genau wissen, wo Sie die Änderungen vornehmen wollen, können Sie dies ganz einfach in FFmpeg tun:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
Dieses Programm kopiert die Video- und Audioströme (-c:av copy), schneidet aber das Video. Mit der Option -t wird die Schnittdauer auf 10 Sekunden festgelegt und mit der Option -ss wird der Startpunkt des zu schneidenden Videos festgelegt, in diesem Fall auf eine Minute (00:01:00). Sie können genauer sein als nur Stunden, Minuten und Sekunden und bei Bedarf bis auf Millisekunden heruntergehen.
Audio extrahieren
Manchmal ist das Video nicht wirklich wichtig, man will nur den Ton. Glücklicherweise ist dies in FFmpeg mit dem -vn Flag sehr einfach:
ffmpeg -i input.mkv -vn audio_only.ogg
Dieser Befehl extrahiert nur den Ton aus der Eingabe, kodiert ihn als Vorbis und speichert ihn in audio_only.ogg. Jetzt haben Sie einen isolierten Audiostrom. Sie können auch die Flags -an und -sn auf die gleiche Weise verwenden, um Audio- und Untertitelströme zu entfernen.
Ein GIF daraus machen
In letzter Zeit haben animierte GIFs (mit einem harten g, weil ich kein Monster bin) ein Comeback erlebt. Ich persönlich halte GIF für das schlechteste Format, das man für Videos wählen kann. Es hat eine schreckliche Komprimierungsqualität und -größe, hat sehr harte Grenzen für Farben, Bildraten und Container-Metadaten und kann keinen Ton unterstützen. Trotzdem ist es sehr beliebt. Wie kann man also einen Videoclip in ein animiertes GIF verwandeln?
Die Verwendung des -an-Flags, ähnlich wie oben, ist besser als die Erstellung eines animierten GIFs, wenn man ein Video ohne Audio erstellen möchte, aber es gibt viele Stellen, die GIFs unterstützen, aber kein anderes Videoformat. Für all diese Fälle:
ffmpeg -i input.mkv output.gif
Dieser Befehl erstellt ein GIF mit denselben Abmessungen wie die Eingabedatei. Dies ist oft eine schlechte Idee, da GIFs im Vergleich zu anderen Videoformaten nicht gut komprimiert werden können (meiner Erfahrung nach ist ein GIF etwa achtmal so groß wie das Quellvideo). Es kann hilfreich sein, die Option -s zu verwenden, um die Größe des GIFs etwas zu verkleinern, vor allem, wenn die Eingabequelle recht groß ist, wie z.B. HD-Video.
Andere Werkzeuge
Während FFmpeg das Tool der Wahl für die meisten AV-Aufgaben ist, ist es nicht perfekt für alles. Es gibt einige Tools, die in Verbindung mit FFmpeg alles ein wenig einfacher machen können.
Videos von YouTube abrufen
Es kann sehr einfach sein, etwas auf YouTube hochzuladen, das ursprüngliche Quellvideo zu verlieren und nur noch die YouTube-Version zu haben. Wie kann man am einfachsten eine Kopie der YouTube-Videos wiederherstellen?
Youtube-dl ist ein raffiniertes kleines Tool, mit dem man Videos von YouTube und verschiedenen anderen Video-Streaming-Diensten abrufen kann. Es ist sehr einfach zu benutzen:
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
Dieser Befehl lädt das Video unter der angegebenen URL herunter und speichert es lokal.
Youtube-dl hat mehrere Optionen zur Steuerung der Qualität und des Formats des heruntergeladenen Videos, aber ich finde es einfacher, den obigen Befehl zu benutzen. Er lädt Audio und Video in höchster Qualität in eine einzige Datei herunter, und dann verwende ich FFmpeg, um sie in das gewünschte Format zu konvertieren.
Informationen über die Medien erhalten
Manchmal muss man nur wissen, was sich im Mediencontainer befindet. Es gibt zwar mehrere Tools, die das können, aber mein bevorzugtes ist MediaInfo. MediaInfo zeigt alle Informationen innerhalb eines Mediencontainers an, und zwar für jeden der verschiedenen Streams sowie die Metadaten der Eingabedatei. Das gibt Ihnen alles, was Sie wissen wollen – und wahrscheinlich eine Menge Dinge, die Sie nicht wussten.
Der Befehl mediainfo inputFile.mkv spuckt eine Liste von Informationen über die Eingabedatei in menschenlesbarer Form aus.
Und mehr…
Das ist nur ein kleiner Ausschnitt dessen, was FFmpeg tun kann. Glücklicherweise ist die Dokumentation für FFmpeg und die anderen Werkzeuge des Projekts sehr gut und es lohnt sich, einen Blick darauf zu werfen. Dort erfahren Sie alles über die vielen verschiedenen Tricks, die dieser Hund kann.
Wenn Sie ein Tool mit einer grafischen Oberfläche zum Konvertieren von Multimedia suchen, ist Handbrake ein außergewöhnlich gutes Tool, das unter Linux, Mac OS X und Windows verfügbar ist. Handbrake verwendet FFmpeg (neben anderen Tools) unter der Haube.