FFmpeg
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Das Projekt FFmpeg 🇬🇧 besteht aus einer Reihe von Programmen und Bibliotheken, die es ermöglichen, Video- und Audiodaten aufzunehmen, zu konvertieren, ins Netzwerk zu übertragen (streamen) und abzuspielen. So enthält es unter anderem mit libavcodec eine hoch entwickelte Codec-Zusammenstellung.
Aufgrund der Tatsache, dass FFmpeg im Terminal ausgeführt wird, ist es möglich, auch mehrere Dateien zu verarbeiten ("Stapelverarbeitung"). Diese Möglichkeit steht bei der Nutzung einer grafischen Oberfläche (siehe unten) meist nicht zur Verfügung.
Zwischenzeitlich war unter Ubuntu statt FFmpeg die Abspaltung Libav in den Quellen, in Ubuntu 16.04 ist das Paket libav-tools allerdings nur noch ein transitionales Paket, welches nur die Weiterleitungen auf die entsprechenden FFmpeg-Programme stellt. 2018 wurde die letzte Version von Libav veröffentlicht und das Projekt wächst seither wieder zusammen.
Installation¶
aus den Quellen¶
FFmpeg ist seit Ubuntu 15.04 wieder in den offiziellen Paketquellen enthalten.
Folgendes Paket muss installiert werden [1]:
ffmpeg (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install ffmpeg
Oder mit apturl installieren, Link: apt://ffmpeg
Aus dem Quellcode¶
Wenn man die Bibliotheken und Programme des FFmpeg-Projektes nutzen möchte, kann man diese direkt aus dem Quellcode installieren. Der Quellcode kann entweder aus den Paketquellen oder - falls eine tagesaktuelle Version benötigt wird - via Git bezogen werden.
Linux Static Builds¶
Die Linux Static Builds 🇬🇧 von John van Sickle stellen eine einfache Möglichkeit dar, die jeweils aktuellste Version von FFmpeg zu erhalten. Er empfiehlt außerdem, dafür seinen jeweiligen Git-Build (für x86 🇬🇧 bzw. x86_64 🇬🇧) zu verwenden. Die Linux Static Builds enthalten auch ffserver
, aber nicht ffplay
(siehe auch Komponenten)!
Hinweis!
Fremdsoftware kann das System gefährden.
Falls noch nicht vorhanden legt man in seinem Home-Verzeichnis das Verzeichnis bin an. Danach muss man sich am System einmal ab- und wieder anmelden, damit das Verzeichnis in die $PATH
Umgebungsvariable aufgenommen wird.
Dann lädt man die aktuelle ffmpeg-Version als Tar-Ball ⮷ herunter(und bei Bedarf auch die passende md5sum MD5 Prüfsumme ⮷). Diese entpackt man[3], wechselt und das entstandene Verzeichnis (z.B. ffmpeg-git-20160820-amd64-static, die Nummer kann sich je nach Version unterscheiden) und kopiert alle Dateien, die mit "ff" anfangen und die Datei qt-faststart ins eben angelegte Verzeichnis bin. Alternativ kann man FFmpeg auch systemweit installieren, indem man die im letzten Kopier-Schritt angegebenen Dateien ins Verzeichnis /usr/local/bin kopiert. Diese Variante benötigt Root-Rechte [4].
Zusätzliche Codecs¶
FFmpeg enthält einige Codecs, die patentrechtlich geschützt und zur Vermeidung von Lizenzgebühren oder einer unklaren Lizenzlage in den Paketen unterschiedlicher Ubuntu-Versionen nicht immer enthalten sind. Dies betrifft die Codecs MP3, AAC, AMR, MPEG-4 und H.264 (bzw. MPEG-4 AVC). Wer ohne diese Codecs auskommt, kann FFmpeg ganz normal aus den offiziellen Paketquellen installieren. Für diejenigen hingegen, die auf die o.g. Codecs nicht verzichten möchten, bestehen die folgenden Möglichkeiten[1]:
Nachrüstung über folgendes Metapaket:
libavcodec-extra (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install libavcodec-extra
Oder mit apturl installieren, Link: apt://libavcodec-extra
Nachrüstung über die ubuntu-restricted-extras, das vorgenannte Metapaket ist darin bereits enthalten.
FFmpeg direkt aus dem Quellcode kompilieren.
Komponenten¶
Das Projekt besteht aus folgenden Komponenten, die alle im Terminal [1] ausgeführt werden (in Klammern der Name bei Libav):
ffmpeg
(avconv
) ist ein Kommandozeilenprogramm, um von einem Video-, Audio- oder Bild-Format zu einem anderen zu konvertieren. Es unterstützt auch das Aufnehmen und Enkodieren von einer TV-Karte in Echtzeit. Dieser Artikel behandelt größtenteils dieses Programm.ffserver
(avserver
) ist ein HTTP-Multimedia-Streaming-Server für Live-Übertragungen über das Internet.ffplay (
avplay
) ist ein sehr einfacher Medienplayer für die Kommandozeile.ffprobe (
avprobe
) ist ein Befehlszeilenwerkzeug zum Analysieren von Multimedia-Streams.qt-faststart
ist ein Dienstprogramm, das Quicktime-Dateien neu anordnet, damit Netzwerk-Streaming möglich istlibavcodec
enthält alle Audio- und Video-Encoder bzw. -Decoder. Die meisten Codecs wurden von Grund auf neu geschrieben, um die beste Ausführungsgeschwindigkeit sicherzustellen. Diese Bibliothek kann von anderen Programmen benutzt werden, um dann die Filme selber darzustellen. Sowohl bei FFmpeg als auch Libav vorhanden.libavformat
enthält alle Container-Parser und -Ersteller für alle herkömmlichen Audio- und Video-Containerformate (z. B. AVI, MKV, OGG, Windows Media etc.). Sowohl bei FFmpeg als auch Libav vorhanden.
Um sowohl die alten als auch die neuen Befehlsaufrufe verwenden zu können, muss unter 16.04 das Paket libav-tools installiert [1] werden.
Benutzung¶
Die allgemeine Syntax bei der Verwendung in einem Terminal lautet:
ffmpeg [Globale_OPTIONEN] [OPTIONEN-der-QUELLDATEI] -i QUELLDATEI [OPTIONEN-der-ZIELDATEI] ZIELDATEI
Nachfolgend eine Übersicht der wichtigsten Optionen. Für eine vollständige Übersicht siehe ffmpeg -h
. Noch mehr Hilfe findet man in der offiziellen Dokumentation 🇬🇧. Außerdem gibt es mehrere Manpages zu FFmpeg, die das Programm als solches oder Teile des Programms näher beschrieben werden. Die Manpage ffmpeg-all 🇬🇧 enthält die komplette Dokumentation.
Allgemeine Optionen | ||
Option | Bedeutung | |
-L | Lizenz anzeigen | |
-h | Hilfe anzeigen | |
-version | Version anzeigen | |
-formats | verfügbare Formate anzeigen | |
-codecs | verfügbare Codecs anzeigen | |
-f FORMAT | FORMAT für Ein-/Ausgabe nutzen | |
-threads ANZAHL | ANZAHL an Threads verwenden (erhöht die Geschwindigkeit bei Mehrkernprozessoren) |
Videooptionen | ||
Option | Bedeutung | |
-vcodec CODEC | CODEC zum Dekodieren/Enkodieren nutzen, falls als Eingabe-/Ausgabeoption genutzt. copy angeben, um Stream zu kopieren | |
-vb BITRATE | Bitrate setzen (in Bit/s) | |
-r FRAMERATE | Framerate setzen (in Frames/Sekunde) | |
-s GRÖSSE | Größe des Videos setzen (Breite x Höhe) | |
-aspect VERHÄLTNIS | Seitenverhältnis setzen (z. B. 4:3 oder 16:9) | |
-vn | Video deaktivieren |
Audiooptionen | ||
Option | Parameter | |
-acodec CODEC | CODEC zum Dekodieren/Enkodieren nutzen, falls als Eingabe-/Ausgabeoption genutzt. copy angeben, um Stream zu kopieren | |
-ab BITRATE | Bitrate setzen (Bit/s) Beispiel: -ab 360k (ohne die Einheit geht's nicht) → ffmpeg -i Eingangsdatei.wma -ab 360k Ausgabedatei.mp3 | |
-ar RATE | Abtastrate setzen (in Hz) | |
-ac KANÄLE | Anzahl der Audiokanäle setzen | |
-vol LAUTSTÄRKE | Lautstärke ändern (256 = normal) (Mit ffmpeg 0.11 wurde diese Option durch den volume -Filter ersetzt. Die neue Syntax lautet: -filter:a volume=1.0 . 1.0 heißt hierbei keine Änderung.) | |
-an | Audio deaktivieren |
Map-Syntax¶
Die neueren FFmpeg- und Libav-Versionen unterstützen eine alternative Syntax, um mehreren Ton- und Videospuren verschiedene Optionen zuzuweisen. Die Nummerierung der Spuren ist dabei nullbasiert, d.h. die erste Spur hat die Nummer 0
, die zweite Spur die 1
usw.
Hier sind ein paar Beispiele, die vollständige Erklärung findet sich in der Man-Page:
neue Syntax/Streamspecifier | ||
Option | Parameter | |
-codec: CODEC | CODEC zum Dekodieren/Enkodieren von allen Spuren nutzen. -codec: copy kopiert Video-, Audio- und Untertitelstreams | |
-codec:a CODEC | alternative Schreibweise für -acodec , alle Tonspuren werden mit diesem Codec enkodiert. | |
-codec:a:1 CODEC | CODEC zum Enkodieren der zweiten Tonspur in der Ausgabedatei nutzen (-codec:a:0 für die erste Tonspur) | |
-codec:v CODEC | alternative Schreibweise für -vcodec | |
-b:a BITRATE | Bitrate für alle Tonspuren setzen (Bit/s) | |
-q:2 QUALITY | QUALITY (z.B. für Vorbis) für die dritte Spur in der Ausgabedatei nutzen | |
-filter:a:0 FILTERGRAPH | FILTERGRAPH auf die erste Tonspur in der Ausgabedatei anwenden (z.B. wäre, um die Lautstärke zu halbieren, der FILTERGRAPH : volume=0.5 ) | |
-filter:v FILTERGRAPH | FILTERGRAPH auf alle Videospuren anwenden, alternative Schreibweise zu -vf |
Des Weiteren kann sehr detailliert angegeben werden, welche Spuren der Eingangsdatei genutzt werden sollen:
map-Syntax | ||
Option | Parameter | |
-map 0 | Verwende alle Spuren der ersten Eingangsdatei | |
-map 0:v | Verwende nur die Videospuren der ersten Eingangsdatei | |
-map 1:a:4 | Verwende nur die fünfte Tonspur der zweiten Eingangsdatei | |
-map -0:s:2 | Verwende nicht den dritten Untertitel der ersten Eingangsdatei | |
-map 1:3 | Verwende nur die vierte Spur der zweiten Eingangsdatei. |
"-map"-Parameter können beliebig kombiniert werden, die Reihenfolge der map-Parameter gibt die Reihenfolge der Spuren in der Ausgabedatei an.
map-Syntax Kombination | ||
Option | Parameter | |
-map 0 -map -0:a:0 | Verwende alle Spuren der ersten Eingangsdatei außer der ersten Audiospur | |
-map 0:0 -map 0:0 | Verwende die erste Spur der ersten Eingangsdatei doppelt | |
-map 0:v -map 0:a | Verwende nur die Video- und Tonspuren der ersten Eingangsdatei | |
-map 0:m:language:deu | Verwende nur deutsche Tonspuren |
x11grab¶
Mit FFmpeg ist es möglich, ein Video (Screencast) eines X11-Bildschirms aufzunehmen. Dabei gilt eine veränderte Syntax:
ffmpeg -f x11grab -i [Hostname]:Display-Nummer.Bildschirm-Nummer[+X-Abstand,Y-Abstand] [Video-Optionen] Ausgabedatei
Die Display(Bildschirm)-Nummer findet man durch die folgende Terminaleingabe heraus:
echo $DISPLAY
Die Aufnahme kann mit Strg + C beendet werden.
Beispiele¶
Es ist möglich, sich einfach nur Informationen über eine Datei anzeigen zu lassen:
ffprobe QUELLDATEI
Ein Video ins MJPEG-Format umwandeln und dabei die Video-Bitrate auf 2000 kBit/s setzen:
ffmpeg -i QUELLE.mov -vcodec mjpeg -b 2000k -acodec libmp3lame -ab 128k -ar 44100 ZIEL.avi
Den Bildschirminhalt (1680x1050) mit
x11-grab
aufnehmen und im H.264-Format mit anderen Abmessungen (768x480) abspeichern:ffmpeg -f x11grab -s 1680x1050 -i :0.0 -s 840x525 -vcodec libx264 -b 4000k -vpre medium -an ZIEL.mp4
Ein(e) Multimediadatei/Video von einem unterstützten Containerformat in ein anderes ummuxen:
ffmpeg -i QUELLDATEI -c copy -map 0 ZIELDATEI
Grafische Oberflächen¶
Wer die Bedienung auf der Kommandozeile scheut und mit eingeschränktem Funktionsumfang leben kann, sollte eine der folgenden grafischen Oberflächen installieren:
Links¶
Intern¶
Videodateien umwandeln Übersichtsseite
Audiodateien umwandeln Übersichtsseite
Extern¶
Ubuntu Compilation Guide 🇬🇧 - FFmpeg kompilieren, diverse Ubuntu-Versionen
FFmpeg - Wikipedia
FFmpeg im französischen Ubuntu-Wiki
FFmpeg versus Libav 🇬🇧 - Vergleich von Libav und FFMpeg durch die Entwickler des MPlayer-Forks mpv
vgtMPEG 🇬🇧 - Erweitertes FFmpeg, welches auch das direkte Auslesen von DVD- und BD-Medien ermöglicht. Dabei werden auch Sprachkennungen für die Audio- und Untertitel-Spuren und Kapitel-Unterteilungen erfasst und in Ausgangsformate wie MP4 und Matroska übertragen. Direkt ausführbare Binaries finden sich auf godromo.com- vgtmpeg ⮷.