ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

FFmpeg

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

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. 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.

Bei Ubuntu 14.04 kommt in der Voreinstellung die Abspaltung Libav zum Einsatz. Das Projekt ist eine Abspaltung von FFmpeg und wurde im Januar 2011 ins Leben gerufen, als ein Teil der Entwickler mit der Projektleitung unzufrieden war. Der Funktionsumfang ist größtenteils identisch zu FFmpeg: Es kann von den gleichen Anwendungen 🇬🇧 verwendet werden und unterstützt bis auf einige Ausnahmen die gleichen Formate und Codecs 🇬🇧. Ein Großteil der Änderungen, die an Libav vorgenommen werden, fließen ebenfalls bei FFmpeg ein (vor allem, um die ABI-Kompatibilität zu wahren). Ab Ubuntu 15.04 steht FFmpeg wieder über die offiziellen Paketquellen zur Verfügung. Daneben besteht für alle Versionen die Möglichkeit der Installation aus dem Quellcode.

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.

Installation

FFmpeg war bei Ubuntu 12.04 und ist wieder ab Ubuntu 15.04 in den offiziellen Paketquellen enthalten. Deshalb ist die Installation bei Ubuntu 14.04 anders als bei den übrigen aktuellen Ubuntu-Versionen.

Ubuntu 14.04

Diese Ubuntu-Version enthält kein FFmpeg. Stattdessen muss man hier Libav installieren. Anschließend können die unter Problembehebung genannten Tipps weiterhelfen.

Ubuntu ab Ubuntu 15.04

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 🇬🇧 stellen eine leichte 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.

Vorgehen:
Falls noch nicht vorhanden legt man in seinem Home-Verzeichnis das Verzeichnis bin an. Nach dem Anlegen muss man sich am System einmal ab- und wieder anmelden, damit das Verzeichnis in die $PATH Umgebungsvariable aufgenommen wird.

Danach 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-64bit-static, die Nummer kann je nach Version anders sein) und kopiert alle Dateien, die mit ff anfangen als auch 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]:

Ab Ubuntu 15.04

  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 einfaches Befehlszeilenwerkzeug zum Analysieren von Multimedia-Streams.

  • qt-faststart ist ein Dienstprogramm, das Quicktime-Dateien neu anordnet, damit Netzwerk-Streaming möglich ist (NICHT bei Ubuntu 14.04).

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

In Ubuntu 12.04 werden aus Kompatibilitätsgründen sowohl die alten als auch die neuen Befehlsaufrufe unterstützt. Ab Ubuntu 15.10 muss man dafür das Paket libav-tools (siehe Libav) installieren [1].

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

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 Aufnahme kann mit Strg + C beendet werden.

Beispiele

  • Es ist möglich, sich einfach nur Informationen über eine Datei anzeigen zu lassen:

    ffmpeg -i 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:

Problembehebung

Ubuntu 14.04

  • Da mit Ubuntu 14.04 das bisher verfügbare Übergangspaket aus den offiziellen Paketquellen entfernt wurde und man dort ausschließlich auf Libav setzt, gibt es Probleme bei Anwendungen, die weiterhin FFmpeg erwarten oder voraussetzen. Teilweise kann es helfen, einfach einen Symlink zu setzen [2], um das Vorhandensein von FFmpeg vorzugaukeln:

    sudo ln -s /usr/bin/avconv /usr/bin/ffmpeg 
  • Falls youtube-dl die folgende Warnung herausgibt:

    WARNING: Your copy of avconv is outdated and unable to properly mux separate video and audio files, youtube-dl will download single file media. Update avconv to version 10-0 or newer to fix this.

    so sollte man zunächst den im vorstehenden Punkt aufgeführten Symlink löschen und außerdem das Paket libav-tools (siehe Libav) deinstallieren [1]. Danach installiert man FFmpeg entweder Aus dem Quellcode oder über die Linux Static Builds.

Intern

Extern

Diese Revision wurde am 30. Januar 2018 09:45 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Multimedia, Video, Server, Codec