ffmpeg – Audio & Video decodieren, encodieren und konvertieren
Ffmpeg ist ein sehr schneller Video- und Audio-Konverter, der auch Informationen aus Live-Audio und Live-Video-Quellen abgreifen kann. Ffmpeg ist ein sehr flexibles Werkzeug und konvertiert mit den richtigen Optionen schnell und flüssig Deine Dateien von z.B. m4a zu wav oder mp4 zu mpg.
Bekannte Programme, die FFmpeg verwenden, sind unter anderem VLC, xine oder HandBrake. Im Folgenden findest Du ein paar ffmpeg-Formeln für die Decodierung, Encodierung und Konvertierung von Audio- und Videodateien.
ffmpeg installieren
ffmpeg installierst Du unkompliziert mit HomeBrew, dem Paketmanager. Es gibt viele Optionen bei der Installation von FFmpeg, denn ffmpeg nutzt zahlreiche verschiedene Bibliotheken, um die verschiedenen Codecs umzurechnen. Der kürzeste Befehl für die Installation von ffmpeg lautet:
Tip
Mehr zu HomeBrew im dazugehörigen Kapitel.
$ brew install ffmpeg
Dann installierst Du womöglich aber nicht alle notwendigen Bibliotheken. Um herauszufinden, welche Optionen es alle gibt, tippst Du brew options ffmpeg
. Das Ergebnis ist ziemlich lang und sieht bei mir so aus. Weiter unten steht dann der vollständige Befehl, um ffmpeg mit allen Optionen zu installieren.
$ brew options ffmpeg
--with-chromaprint
Enable the Chromaprint audio fingerprinting library
--with-fdk-aac
Enable the Fraunhofer FDK AAC library
--with-fontconfig
Build with fontconfig support
--with-freetype
Build with freetype support
--with-frei0r
Build with frei0r support
--with-game-music-emu
Build with game-music-emu support
--with-libass
Enable ASS/SSA subtitle format
--with-libbluray
Build with libbluray support
--with-libbs2b
Build with libbs2b support
--with-libcaca
Build with libcaca support
--with-libebur128
Enable using libebur128 for EBU R128 loudness measurement
--with-libgsm
Build with libgsm support
--with-libmodplug
Build with libmodplug support
--with-libsoxr
Enable the soxr resample library
--with-libssh
Enable SFTP protocol via libssh
--with-libvidstab
Enable vid.stab support for video stabilization
--with-libvorbis
Build with libvorbis support
--with-libvpx
Build with libvpx support
--with-opencore-amr
Enable Opencore AMR NR/WB audio format
--with-openh264
Enable OpenH264 library
--with-openjpeg
Enable JPEG 2000 image format
--with-openssl
Enable SSL support
--with-opus
Build with opus support
--with-rtmpdump
Enable RTMP protocol
--with-rubberband
Enable rubberband library
--with-schroedinger
Enable Dirac video format
--with-sdl2
Enable FFplay media player
--with-snappy
Enable Snappy library
--with-speex
Build with speex support
--with-tesseract
Enable the tesseract OCR engine
--with-theora
Build with theora support
--with-tools
Enable additional FFmpeg tools
--with-two-lame
Build with two-lame support
--with-wavpack
Build with wavpack support
--with-webp
Enable using libwebp to encode WEBP images
--with-x265
Enable x265 encoder
--with-xz
Enable decoding of LZMA-compressed TIFF files
--with-zeromq
Enable using libzeromq to receive commands sent through a libzeromq client
--with-zimg
Enable z.lib zimg library
--without-lame
Disable MP3 encoder
--without-qtkit
Disable deprecated QuickTime framework
--without-securetransport
Disable use of SecureTransport
--without-x264
Disable H.264 encoder
--without-xvid
Disable Xvid MPEG-4 video encoder
--HEAD
Install HEAD version
Um ffmpeg mit allen wichtigen Optionen zu installieren, kopierst Du am Besten den folgenden Befehl in Dein Terminal und lässt HomeBrew den Rest erledigen.
$ brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools
Solltest Du ffmpeg bereits installiert haben, kannst Du mit dem folgenden Befehl ffmpeg auf den aktuellen Stand bringen.
$ brew update && brew upgrade ffmpeg
Videos konvertieren mit ffmpeg
ffmpeg: Video Informationen anzeigen
$ ffmpeg -i video.avi
ffmpeg: Video in anderes Format umwandeln/konvertieren
ffmpeg erkennt anhand des Dateiendes das Format, in welches es das Video konvertieren soll. Der folgende Befehl konvertiert eine avi-Videodatei in eine mpg-Videodatei.
$ ffmpeg -i original.avi neues-format.mpg
Und der folgende Befehl wandelt eine mpg- in eine mp4-Datei.
$ ffmpeg -i original.mpg neues-format.mp4
-
-i
Parameter, der das Inputfileoriginal.avi
festlegt. -
neues-format.mpg
legt Format durch Dateiendung fest
ffmpeg: Video in Teile schneiden ohne erneute Encodierung
$ ffmpeg -i original.mp4 -ss 00:06:15 -c copy ausschnitt.mp4
-
-i
Parameter, der das Inputfileoriginal.avi
festlegt. -
-ss 00:06:15
steht für die Startzeit, ab welcher der Ausschnitt beginnen soll. -
-c copy
Legt den Codec mitc
fest. Da kein Codec benannt wird, bleibt es bei dem Eingangscodec.copy
erstellt dann die Kopie.
Audio konvertieren mit ffmpeg
WAV in MP3 umwandeln mit FFMPEG
Um WAV-Dateien in MP3-Dateien umzuwandeln, solltest Du unbedingt die
Option -ab
plus einen entsprechenden Wert nutzen. Konvertierst Du mit
ffmpeg Audiodateien ohne eine Qualitätsangabe komprimiert ffmpeg MP3s
mit der schlechtesten Qualität. Also, besser so:
ffmpeg -i song.wav -ab 320k song.mp3
- TIPP
Um einen ganzen Ordner WAV-Dateien in MP3s zu verwandeln, genügt diese kleine for-Schleife:for i in .wav; do ffmpeg -i "$i" -ab 320k "${i%.}.mp3"; done
.
Eine WAV-Datei gleichzeitig in mehrere Audioformate umwandeln
Du kannst eine Eingangsdatei verwenden, um mehrere verschiedene
Ausgabedateien zu erhalten. Dazu genügen einfach die Präfixe des
gewünschten Ausgabeformates. Das folgende Beispiel verwandelt die
WAV-Datei song.wav
nacheinander als OGG-, MP4- und MP3-Datei.
ffmpeg -i song.wav song.ogg song.mp4 song.mp3
Um die Qualität zu steuern, musst Du wiederum die Parameter mit angeben. Perfekte Soundqualität erhälst Du dann so:
ffmpeg -i song.wav -aq 10 song.ogg song.mp4 -ab 320k song.mp3
WAV-Dateien in OGG-Datei umwandeln mit FFMPEG
Ogg ist ein Container-Format. Es nutzt in der Regel den Vorbis audio codec. Diesen kann man mit ffmpeg installieren und ist mit dem libvorbis encoder gebündelt. Um eine WAV-Datei in eine OGG-Datei umzuwandeln nutzt man den folgenden Befehl
$ ffmpeg -i input.wav -c:a libvorbis -qscale:a 5 output.ogg
Das Qualitätsniveau geht von 0 bis 10. Wobei 10 die höchste
Qualitätsstufe bildet. Im obigen Beispiel ist die Qualität 5
, also
Mittelmaß.
m4a nach mp3
$ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done
Eine Mix-MP3-Datei aus mehreren FLAC-Dateien erstellen
Mit dem folgenden Skript führst Du mehrere Audio-Dateien im FLAC-Format zu einer einzigen MP3-Datei zusammen. Das Skript erstellt zuerst eine Liste aller FLAC-Dateien im aktuellen Verzeichnis, sortiert sie und speichert diese Liste in einer Datei namens mylist.txt.
Anschließend verwendet das Skript das Programm ffmpeg, um alle aufgelisteten FLAC-Dateien basierend auf der erstellten Liste zu einer einzigen MP3-Datei zu konvertieren. Nach der Konvertierung löscht das Skript die temporär erstellte Dateiliste mylist.txt wieder.
printf "file '%s'\n" $(ls *.flac | sort -V) > mylist.txt
ffmpeg -f concat -safe 0 -i mylist.txt -c:a libmp3lame -q:a 0 output.mp3
rm mylist.txt
Noch einmal schrittweise erklärt, was das Skript macht:
ls *.flac
: Listet nur Dateien mit der Erweiterung .flac auf.sort -V
: Sortiert die Dateiliste in natürlicher Reihenfolge (Version Sort).printf "file '%s'\n"
: Erstellt eine formatierte Liste der Dateien fürffmpeg
.ffmpeg -f concat -safe 0 -i mylist.txt -c:a libmp3lame -q:a 0 output.mp3
: Konvertiert die aufgelisteten .flac-Dateien in eine einzelne MP3-Datei.rm mylist.txt
: Entfernt die temporäre Dateiliste nach der Konvertierung.
MP3-Dateien umbenennen mit ffmpeg und ffprobe
Für eine effektive Verwaltung von Musikbibliotheken ist die konsistente Benennung von MP3-Dateien entscheidend. Das Terminal bietet Dir eine leistungsstarke Lösung.
Inkonsistente Dateinamen in MP3-Sammlungen erschweren das Auffinden und Sortieren von Titeln. Die notwendigen Informationen sind meist in den Metadaten eingebettet, was eine manuelle Umbenennung mühsam macht.
Mit dem folgenden Bash-Skript, das ffprobe (Teil des ffmpeg-Pakets) nutzt, benennst Du automatisch mit Hilfe der in den MP3 befindlichen Metadaten die Dateinamen um. ffprobe extrahiert effizient Metadaten wie Künstlername, Titel und Tracknummer.
Skript für die effektive Umbenennung
Das folgende Skript benennt alle MP3-Dateien in einem Verzeichnis um:
for f in *.mp3; do
artist=$(ffprobe -v error -of csv=p=0 -show_entries format_tags=artist "$f")
title=$(ffprobe -v error -of csv=p=0 -show_entries format_tags=title "$f")
trackNumber=$(ffprobe -v error -of csv=p=0 -show_entries format_tags=track "$f")
if [[ -n $artist && -n $title && -n $trackNumber ]]; then
mv -- "$f" "${trackNumber} - ${artist} - ${title}.mp3"
fi
done
Liste von MP3-Standard-Tags
Die Standard-Tags für Metadaten in Audio- und Videodateien, insbesondere in Formaten wie MP3 oder MP4, können je nach Codierung und Software, die zur Erstellung der Datei verwendet wurde, variieren. Allerdings gibt es eine Reihe von gängigen Metadaten-Tags, die Du häufig finden wirst. Du kannst Sie kombinieren, um das obige Skript Deinen Wünschen anzupassen:
- Title
- Der Titel des Tracks oder Videos.
- Artist
- Der Name des Künstlers oder Interpreten.
- Album
- Der Name des Albums, zu dem der Track gehört.
- Album Artist
- Der Künstler des Albums, der manchmal vom einzelnen Track-Künstler abweicht.
- Track Number
- Die Position des Tracks auf dem Album.
- Year
- Das Jahr der Veröffentlichung.
- Genre
- Das Musik- oder Video-Genre.
- Comment
- Kommentare oder zusätzliche Notizen.
- Composer
- Der Komponist des Stücks.
- Lyrics
- Der Liedtext.
- Publisher
- Das Label oder der Herausgeber.
- Language
- Die Sprache des Inhalts.
- Duration
- Die Dauer des Tracks oder Videos.
- Bitrate
- Die Bitrate der Datei.
GIF-Bilder mit ffmpeg erstellen
Der folgende Befehl erstellt eine GIF-Datei mit den gleichen Abmessungen wie die Eingabedatei. In der Regel ist das eine schlechte Idee, da GIFs im Vergleich zu anderen Videoformaten nicht gut komprimiert werden und aus einer mehrminütigen Datei ein kolossales GIF erstellen.
ffmpeg -i original.mp4 ergebnis.gif
Video für GIF optimieren: Kürzen und Skalieren
Zuerst schneidest Du also nur einen Ausschnitt aus der Video-Datei mit
-ss
und -t
, um einen Anfang zu definieren und die Dauer des
Ausschnitts zu bestimmen. Gleichzeitig skalierst Du die Videodatei
(
Skalieren mit ffmpeg), z.B. auf
eine Breite von 480 Pixeln mit scale=480:-1
. Die -1
befiehlt ffmpeg
das Seitenverhältnis beizubehalten. Du kannst aber auch einen Wert wie
z.B. scale=480:240
eingeben. Das Ergebnis könnte dann aber verzerrt
aussehen.
ffmpeg -ss 0.0 -t 2.5 -i original.mp4 -vf scale=480:-1 video320.mp4
Farbpalette erzeugen für bessere GIF-Bilder
Damit das GIF richtig gut aussieht, extrahierst Du als nächstes per Video-Filter eine Palette des Videos, die als palette.png abgespeichert wird.
ffmpeg -i video320.mp4 -filter_complex "[0:v] palettegen" palette.png
Und im letzten Schritt erstellst Du jetzt das 480 Pixel breite GIF mit optimierter Farbpalette.
ffmpeg -i video480.mp4 -i palette.png -filter_complex "[0:v][1:v] paletteuse" ergebnis.gif
Noch mehr ffmpeg Anleitungen
-
Deutsche Anleitungen
Videohokuspokus mit ffmpeg -
Englische Anleitungen
How to install FFmpeg on Mac OS X
A FFmpeg Tutorial For Beginners
19 ffmpeg commands for all needs
How to watermark a video using FFmpeg