ffmpeg: Basics (Audio)
Das Tool "ffmpeg" kann man mit Fug und Recht als "Schweizer Taschenmesser für Datenumwandlung im Bereich Multimedia" bezeichnen.
Es handelt sich um einen sehr schnellen und sehr mächtigen (und damit auch teilweise mächtig kryptischen) Enkodierer/Dekodierer für die Kommandozeile, der so ziemlich alles aus dem Bereich Multimediadateien in so ziemlich alles Andere umwandeln kann.
Die Installation von ffmpeg sollte über den Paketmanager erfolgen, aufgrund lizenzrechtlicher Gründe findet man in einigen Distributionen das entsprechende Paket nicht in den offiziellen Repositories der jeweiligen Distribution.
So bietet z.B. für openSUSE das Packmanprojekt entsprechende Pakete an, für Fedora schaut man sich am besten bei rpmfusion.org um, aber wie man eventuell benötigte Paketquellen einbindet und ffmpeg installiert, soll hier aber nicht Gegenstand des Beitrags sein, hierzu konsultiere man die Dokumentation seiner Distribution.
Die Grundsyntax von ffmpeg ist eigentlich recht simpel,
wobei es eben eine riesige Fülle an diversen Parametern gibt, mit welchen sich Dateiformate, Containerformate, Codecs, Bitraten, etc. pp. sehr fein einstellen lassen.
Das eigentliche Hauptgebiet für ffmpeg ist die Umwandlung von Videodateien, aber das bedeutet nicht, daß man dieses Werkzeug nicht zur Konvertierung von reinen Audiodateien verwenden kann, im Gegenteil, gerade durch die große Anzahl von Ein- und Ausgabeformaten, stellt ffmpeg hier oft die schnellste Lösung dar, da viele Tools wie z.B. lame (MP3). oggenc (OGG-vorbis), flac (FLAC) oder opusenc (OGG-Opus) gewisse Einschränkungen in Bezug auf das Format der Eingabedatei besitzen.
So ist es z.B. nicht möglich eine .mp3 mittels oggenc direkt in eine OGG-Vorbis Datei umzuwandeln, da oggenc keine mp3 dekodieren kann und man so einen Zwischenschritt benötigt, der zuerst die .mp3 in eine WAVE-Datei umwandelt (*.wav) um diese dann mittels oggenc zum Zielformat konvertieren zu können.
Da die Anzahl der Parameter für die Konvertierung von Audiodateien meist geringer als beim Umwandeln von Videos ist, will ich hier mit ein paar entsprechenden Beispielen beginnen, auch um der/den geneigten Leser(in) Beispiele zu liefern, die noch einigermaßen übersichtlich sind.
Mit ffmpeg ist das Ganze in einem Schritt zu erledigen:
Bedeutung der Parameter:
- i (Eingabedatei)
-vn (keine Videospur codieren, hier unnötig, da mp3 kein Video enthalten kann, bei anderen Dateiformaten durchaus wichtig, eine ".ogg" kann sowohl Video als auch Audiodatei sein)
-c:a (Codec für Audio, äquivalent kann auch "-acodec" verwendet werden. Dabei muss man den genauen Namen der Codecs kennen, hier hilft z.B. der Befehl "ffmpeg -encoders")
Nun ist dieses Beispiel eher zu simpel, eine oft gewollte Funktion ist das Kodieren mit einer bestimmten Bitrate/Qualität.
Hier nun ein Beispiel, welches aus meiner Alltagspraxis stammt, da ich öfters Podcasts höre, welche nur in einem proprietären Format und mit IMHO viel zu hoher Bitrate angeboten werden, denn selbst für ein Gespräch mit mehreren Personen brauche ich keine 128KBit MP3-Datei, oft kann man sogar auf Stereo verzichten.
Was bedeuten die neuen Parameter?
- b:a (Bitrate für Audio, 64 KBit reichen für Sprache dicke aus)
-f ogg (Explizite Angabe des Containerformates, sonst beschwert sich ggf. ffmpeg, wenn es anhand der Dateiendung (man beachte, "oga" statt "ogg") keine eindeutige Zuordnung machen kann)
Das Ganze jetzt noch als 56 KBit ogg-Datei mit nur einem Audiokanal ("Mono"):
Parameter:
-ac 1 (Audio Channels 1, also nur ein einziger Audiokanal, vulgo "Mono")
Wer z.B. einen tragbaren Mediaplayer besitzt, auf welchem sich Rockbox installieren lässt, kann sich auch seine Hörbücher/Podcasts im neuen Ogg-OPUS Format kodieren, welches sich besonders gut für niedrige Bitraten und Sprache eignet und mittlerweile als offizieller, freier Standard für Audio in HTML5 festgelegt wurde.
Wer etwas mutiger ist, kann auch mal "-b:a 32k" versuchen und sich von der (meist) noch erstaunlich guten Qualität überraschen lassen.
Wie oben angemerkt, ist die Option "-vn" bei einer mp3-Datei als Quelle nicht zwingend notwendig, da .mp3 kein Video enthalten kann, aber es gibt durchaus einen recht häufig in diversen Foren angefragten Anwendungsfall, bei welchem diese Option mit die Wichtigste ist.
Die typische Frage in diversen Foren lautet in etwa so:
Wie extrahiert man die Audiospur aus einer Videodatei (und wandelt sie ggf. in $GEWÜNSCHTES_AUDIOFORMAT um)?
Mit ffmpeg ist das Ganze ein Kinderspiel.
Je nach Quelldatei macht es ab und zu keinen Sinn neu zu kodieren, hat man z.B. ein OGG-Theora-Video (*.ogg oder *.ogv) und will die Audiospur als OGG-Vorbis Audio (*.oga oder *.ogg) extrahieren, dann reicht ein einfaches "Herausschnibbeln" der Audiospur ohne erneut zu kodieren, denn der Standard für OGG-Videos sieht für die Audiospur (zwingend?) die Verwendung von OGG-Vorbis als Codec vor.
Hierzu gibt es einen speziellen Wert für die Wahl des Audiocodecs.
Das "copy" ist eigentlich selbsterklärend, es werden sowohl Audiocodec als auch Audiobitrate genau so übernommen und nur die Audiospur extrahiert, was dann übrigens im Vergleich zum Umkodieren entsprechend schneller von Statten geht.
Um entscheiden zu können, wann/ob sich das Umkodieren lohnt, wäre nun ein Werkzeug praktisch, mit welchem man Informationen über eine Multimediadatei erhalten kann.
Hierzu liefert ffmpeg das Tool "ffprobe" mit, die Syntax ist dabei sehr simpel:
Und als abschließender Tipp; welche Dateiformate ffmpeg lesen kann, sagt einem übrigens (analog zum Befehl zur Ermittlung der unterstützten Formate für das Ziel) "ffmpeg -decoders".
Greetz,
RM
Das Tool "ffmpeg" kann man mit Fug und Recht als "Schweizer Taschenmesser für Datenumwandlung im Bereich Multimedia" bezeichnen.
Es handelt sich um einen sehr schnellen und sehr mächtigen (und damit auch teilweise mächtig kryptischen) Enkodierer/Dekodierer für die Kommandozeile, der so ziemlich alles aus dem Bereich Multimediadateien in so ziemlich alles Andere umwandeln kann.
Die Installation von ffmpeg sollte über den Paketmanager erfolgen, aufgrund lizenzrechtlicher Gründe findet man in einigen Distributionen das entsprechende Paket nicht in den offiziellen Repositories der jeweiligen Distribution.
So bietet z.B. für openSUSE das Packmanprojekt entsprechende Pakete an, für Fedora schaut man sich am besten bei rpmfusion.org um, aber wie man eventuell benötigte Paketquellen einbindet und ffmpeg installiert, soll hier aber nicht Gegenstand des Beitrags sein, hierzu konsultiere man die Dokumentation seiner Distribution.
Die Grundsyntax von ffmpeg ist eigentlich recht simpel,
Code:
ffmpeg -i <Quelldatei> [Optionen] <Ausgabedatei>
Das eigentliche Hauptgebiet für ffmpeg ist die Umwandlung von Videodateien, aber das bedeutet nicht, daß man dieses Werkzeug nicht zur Konvertierung von reinen Audiodateien verwenden kann, im Gegenteil, gerade durch die große Anzahl von Ein- und Ausgabeformaten, stellt ffmpeg hier oft die schnellste Lösung dar, da viele Tools wie z.B. lame (MP3). oggenc (OGG-vorbis), flac (FLAC) oder opusenc (OGG-Opus) gewisse Einschränkungen in Bezug auf das Format der Eingabedatei besitzen.
So ist es z.B. nicht möglich eine .mp3 mittels oggenc direkt in eine OGG-Vorbis Datei umzuwandeln, da oggenc keine mp3 dekodieren kann und man so einen Zwischenschritt benötigt, der zuerst die .mp3 in eine WAVE-Datei umwandelt (*.wav) um diese dann mittels oggenc zum Zielformat konvertieren zu können.
Da die Anzahl der Parameter für die Konvertierung von Audiodateien meist geringer als beim Umwandeln von Videos ist, will ich hier mit ein paar entsprechenden Beispielen beginnen, auch um der/den geneigten Leser(in) Beispiele zu liefern, die noch einigermaßen übersichtlich sind.
Mit ffmpeg ist das Ganze in einem Schritt zu erledigen:
Code:
ffmpeg -i QUELLDATEI.mp3 -vn -c:a libvorbis ZIELDATEI.ogg
- i (Eingabedatei)
-vn (keine Videospur codieren, hier unnötig, da mp3 kein Video enthalten kann, bei anderen Dateiformaten durchaus wichtig, eine ".ogg" kann sowohl Video als auch Audiodatei sein)
-c:a (Codec für Audio, äquivalent kann auch "-acodec" verwendet werden. Dabei muss man den genauen Namen der Codecs kennen, hier hilft z.B. der Befehl "ffmpeg -encoders")
Nun ist dieses Beispiel eher zu simpel, eine oft gewollte Funktion ist das Kodieren mit einer bestimmten Bitrate/Qualität.
Hier nun ein Beispiel, welches aus meiner Alltagspraxis stammt, da ich öfters Podcasts höre, welche nur in einem proprietären Format und mit IMHO viel zu hoher Bitrate angeboten werden, denn selbst für ein Gespräch mit mehreren Personen brauche ich keine 128KBit MP3-Datei, oft kann man sogar auf Stereo verzichten.
Code:
fmpeg -i QUELLDATEI.mp3 -vn -c:a libvorbis -b:a 64k -f ogg ZIELDATEI.oga
- b:a (Bitrate für Audio, 64 KBit reichen für Sprache dicke aus)
-f ogg (Explizite Angabe des Containerformates, sonst beschwert sich ggf. ffmpeg, wenn es anhand der Dateiendung (man beachte, "oga" statt "ogg") keine eindeutige Zuordnung machen kann)
Das Ganze jetzt noch als 56 KBit ogg-Datei mit nur einem Audiokanal ("Mono"):
Code:
fmpeg -i QUELLDATEI.mp3 -vn -c:a libvorbis -b:a 56k -ac 1 -f ogg ZIELDATEI.oga
-ac 1 (Audio Channels 1, also nur ein einziger Audiokanal, vulgo "Mono")
Wer z.B. einen tragbaren Mediaplayer besitzt, auf welchem sich Rockbox installieren lässt, kann sich auch seine Hörbücher/Podcasts im neuen Ogg-OPUS Format kodieren, welches sich besonders gut für niedrige Bitraten und Sprache eignet und mittlerweile als offizieller, freier Standard für Audio in HTML5 festgelegt wurde.
Code:
fmpeg -i QUELLDATEI.mp3 -vn -c:a libopus -b:a 48k -ac 1 ZIELDATEI.opus
Wie oben angemerkt, ist die Option "-vn" bei einer mp3-Datei als Quelle nicht zwingend notwendig, da .mp3 kein Video enthalten kann, aber es gibt durchaus einen recht häufig in diversen Foren angefragten Anwendungsfall, bei welchem diese Option mit die Wichtigste ist.
Die typische Frage in diversen Foren lautet in etwa so:
Wie extrahiert man die Audiospur aus einer Videodatei (und wandelt sie ggf. in $GEWÜNSCHTES_AUDIOFORMAT um)?
Mit ffmpeg ist das Ganze ein Kinderspiel.
Code:
ffmpeg -i <VIDEODATEI.DATEIENDUNG> -vn -c:a NAME_DES_ENCODERS -b:a GEWÜNSCHTE_BITRATE -f GEWÜNSCHTER_ZIELCONTAINER <AUDIODATEI.DATEIENDUNG>
Hierzu gibt es einen speziellen Wert für die Wahl des Audiocodecs.
Code:
ffmpeg -i <VIDEO.ogg> -vn -c:a copy -f ogg AUDIO.ogg
Um entscheiden zu können, wann/ob sich das Umkodieren lohnt, wäre nun ein Werkzeug praktisch, mit welchem man Informationen über eine Multimediadatei erhalten kann.
Hierzu liefert ffmpeg das Tool "ffprobe" mit, die Syntax ist dabei sehr simpel:
Code:
ffprobe <DATEI>
Greetz,
RM