ubuntuusers.de

FFmpeg

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


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:

ffmpeg-logo-neu.png 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 (Werkzeuge zum Abspielen, Streamen und Umcodieren von Multimediadateien, universe)

Befehl zum Installieren der Pakete:

sudo apt-get install ffmpeg 

Oder mit apturl installieren, Link: apt://ffmpeg

Zusätzlich kann die umfangreiche Dokumentation als Paket installiert werden:

  • ffmpeg-doc (Documentation of the FFmpeg multimedia framework, universe, optional)

Befehl zum Installieren der Pakete:

sudo apt-get install ffmpeg-doc 

Oder mit apturl installieren, Link: apt://ffmpeg-doc

Ein umfangreiches englisches Handbuch zum Programm findet man dann im Browser unter der URL: file:///usr/share/doc/ffmpeg/manual/ffmpeg.html; in anderen Unterverzeichnissen von /usr/share/doc/ffmpeg/ werden Informationen zu den Bibliotheken sowie zur Arbeitsweise und andere Informationen abgelegt.

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]:

  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

  2. Nachrüstung über die ubuntu-restricted-extras, das vorgenannte Metapaket ist darin bereits enthalten.

  3. 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 ist

  • libavcodec 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)
-hide_banner Ausgabe der Version, der Lizenz und der Konfiguration unterdrücken.

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 

  • Die Benutzung der globalen Option -hide_banner (auch bei den anderen Beispielen) verbessert die Übersicht:

    ffprobe -hide_banner 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:

Intern

Extern

  • FFmpeg Homepage 🇬🇧

  • 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 ⮷.

Diese Revision wurde am 14. Juni 2023 19:45 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Multimedia, Video, Server, Codec