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:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Ein Terminal öffnen

  3. ⚓︎ Dateien entpacken

  4. ⚓︎ Root-Rechte

Inhaltsverzeichnis
  1. Installation
  2. Zusätzliche Codecs
  3. Komponenten
  4. Benutzung
  5. Links

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

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:

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

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

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