[[Vorlage(Getestet, jammy, bionic, focal)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Archivmanager: Dateien entpacken] [:Root-Rechte:] }}} [[Inhaltsverzeichnis(1)]] [[Bild(ffmpeg-logo-neu.png, 200, align=left)]] Das Projekt [http://www.ffmpeg.org/ FFmpeg] {en} 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 [wikipedia: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 [#Grafische-Oberflaechen grafischen Oberfläche] (siehe unten) meist nicht zur Verfügung. Zwischenzeitlich war unter Ubuntu statt FFmpeg die Abspaltung [:Archiv/Libav: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 [#Komponenten 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 [:Vivid:Ubuntu 15.04] wieder in den offiziellen Paketquellen enthalten. Folgendes Paket muss installiert werden [1]: {{{#!vorlage Paketinstallation ffmpeg, Werkzeuge zum Abspielen, Streamen und Umcodieren von Multimediadateien, universe }}} Zusätzlich kann die umfangreiche Dokumentation als Paket installiert werden: {{{#!vorlage Paketinstallation ffmpeg-doc, Documentation of the FFmpeg multimedia framework, universe, optional }}} 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. ##, was im separaten Artikel [:FFmpeg/Kompilieren:] beschrieben ist. Der Quellcode kann entweder aus den Paketquellen oder - falls eine tagesaktuelle Version benötigt wird - via [:Git:] bezogen werden. == Linux Static Builds == Die [http://johnvansickle.com/ffmpeg/ Linux Static Builds] {en} 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 [http://johnvansickle.com/ffmpeg/builds/ffmpeg-git-i686-static.tar.xz x86] {en} bzw. [http://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz x86_64] {en}) zu verwenden. Die Linux Static Builds enthalten auch `ffserver`, aber __nicht__ `ffplay` (siehe auch [#Komponenten Komponenten])! [[Vorlage(Fremd, Software)]] 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 [http://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz Tar-Ball] {dl} herunter(und bei Bedarf auch die passende [:md5sum:] [http://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz.md5 MD5 Prüfsumme] {dl}). 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:{{{#!vorlage Paketinstallation libavcodec-extra, universe }}} 1. Nachrüstung über die [:ubuntu-restricted-extras:], das vorgenannte Metapaket ist darin bereits enthalten. 1. 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, [:Matroska:MKV], [:Vorbis: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: {{{#!vorlage Befehl 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 [http://ffmpeg.org/ffmpeg.html offiziellen Dokumentation] {en}. Außerdem gibt es mehrere [:man:Manpages] zu FFmpeg, die das Programm als solches oder Teile des Programms näher beschrieben werden. Die Manpage [http://www.ffmpeg.org/ffmpeg-all.html ffmpeg-all] {en} enthält die komplette Dokumentation. {{{#!vorlage Tabelle 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. }}} {{{#!vorlage Tabelle 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 }}} {{{#!vorlage Tabelle 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` [wikipedia: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:Man-Page]: {{{#!vorlage Tabelle 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: {{{#!vorlage Tabelle 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. {{{#!vorlage Tabelle 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 [:XServer:X11]-Bildschirms aufzunehmen. Dabei gilt eine veränderte Syntax: {{{#!vorlage Befehl 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 [[Vorlage(Tasten, ctrl+c)]] beendet werden. == Beispiele == * Es ist möglich, sich einfach nur Informationen über eine Datei anzeigen zu lassen: {{{#!vorlage Befehl ffprobe QUELLDATEI }}} * Die Benutzung der globalen Option `-hide_banner` (auch bei den anderen Beispielen) verbessert die Übersicht: {{{#!vorlage Befehl ffprobe -hide_banner QUELLDATEI }}} * Ein Video ins MJPEG-Format umwandeln und dabei die Video-Bitrate auf 2000 kBit/s setzen: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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: * [:HandBrake:] * [:WinFF:] = Links = == Intern == * [:Videodateien umwandeln:] {Übersicht} Übersichtsseite * [:Audiodateien umwandeln:] {Übersicht} Übersichtsseite ## * [:FFmpeg/Kompilieren:] - Selbst Kompilieren == Extern == * [http://ffmpeg.org FFmpeg Homepage] {en} * [http://ffmpeg.org/general.html Dokumentation] {en} * [https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu Ubuntu Compilation Guide] {en} - FFmpeg kompilieren, diverse Ubuntu-Versionen * [wikipedia:FFmpeg:] - Wikipedia * [ubuntu_fr:FFmpeg:] im französischen Ubuntu-Wiki * [github:haasn/mpvhq-old/wiki/FFmpeg-versus-Libav:FFmpeg versus Libav] {en} - Vergleich von Libav und FFMpeg durch die Entwickler des MPlayer-Forks [:mpv:] * [github:vigata/vgtmpeg:vgtMPEG] {en} - 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 [wikipedia:MP4:] und [wikipedia:Matroska:] übertragen. Direkt ausführbare Binaries finden sich auf [http://godromo.com/gmt/vgtmpeg/ godromo.com- vgtmpeg] {dl}. # tag: Multimedia, Server, Video, Codec