Skip to main content

FFmpeg Basics

Bei FFmpeg handelt es sich um eine mächtige Sammlung an freien Computerprogrammen und Programmbibliotheken, die digitales Video- und Audiomaterial aufnehmen, konvertieren, senden, filtern und in verschiedene Containerformate verpacken können. FFmpeg wird zu meist über die Kommandozeile bedient, es bestehen aber auch unterschiedliche grafische Oberflächen für die unterschiedlichsten Einsatzzwecken. Zum Beispiel Videoschnitt Programme, welche auf FFmpeg aufbauen oder Programme um Videos von zum Beispiel DVDs herunter zu bekommen. Auf dieser Seite beschäftigen wir uns mit dem streamen eines Desktops mithilfe FFmpeg auf der Kommandozeile.


Download und Installation

FFmpeg steht für verschiedene Betriebssystemen zur Verfügung und kann von der offiziellen Seite, sowie aus den Paketquellen des jeweiligen Paketmanagers heruntergeladen werden.

Windows

Installer herunterladen und ausführen:
FFmpeg: https://ffmpeg.org/download.html#build-windows
GitHub Source: https://github.com/obsproject/obs-studio/releases

Aus dem Quellcode kompilieren
Dokumentation: https://trac.ffmpeg.org/wiki/CompilationGuide

macOS

Installer herunterladen und ausführen:
FFmpeg: https://ffmpeg.org/download.html#build-mac
GitHub Source: https://github.com/obsproject/obs-studio/releases

Aus dem Quellcode kompilieren
Dokumentation: https://trac.ffmpeg.org/wiki/CompilationGuide

Mittels brew installieren:

brew install ffmpeg

macOS

Installer herunterladen und ausführen:
FFmpeg: https://ffmpeg.org/download.html#build-mac
GitHub Source: https://github.com/obsproject/obs-studio/releases

Aus dem Quellcode kompilieren
Dokumentation: https://trac.ffmpeg.org/wiki/CompilationGuide

Mittels brew installieren:

brew install ffmpeg

GNU/Linux

details

Die Installation für Linux kann auf verschiedenen Wegen erfolgen.

Ubuntu
sudo apt update
sudo apt install ffmpeg
Arch Linux und Manjaro:
details
sudo pacman -S ffmpeg

Im AUR befinden sich verschiedene PKBUILDs um FFmpeg in unterschiedlichen Ausführungen zu bauen:

  • ffmpeg-full
    • Die aktuelle stabile Version von FFmpeg wird komplett aus dem Quellcode gebaut.
  • ffmpeg-full-git
    • Der aktuelle Release Canidate von FFmpeg wird komplett aus dem Quellcode gebaut.
  • ffmpeg-amd-full
    • FFmpeg wird in der aktuellsten stabilen Version für AMD Hardware gebaut.
  • ffmpeg-amd-full-git
    • Der aktuelle Release Canidate von FFmpeg wird für AMD Hardware gebaut.
  • ffmpeg-cuda
    • FFmpeg wird in der aktuellen stabilen Version mit CUDA (Nvidia) Unterstützung gebaut.
Debian:
details
sudo apt update
sudo apt install ffmpeg
Fedora:
details
sudo dnf -y install ffmpeg
Gentoo:
details
emerge --ask media-video/ffmpeg
NixOS:
details

https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/ffmpeg-full/default.nix

OpenMandriva Lx4
details
dnf install ffmpeg
Solus
details
eopkg install ffmpeg
Void
details
sudo xbps-install ffmpeg

Einführung

Es bestehen unterschiedliche Möglichkeiten mittels FFmpeg zu streamen. Der Einsatzzweck kann hierbei sehr unterschiedlich sein. Zum Beispiel soll ein bestehender RTMP Stream abgegriffen und umgeleitet werden, oder es befinden sich Videos auf einem Server, welche gestreamt werden sollen, damit der eigene PC nicht dauerhaft laufen muss.

Für diesen Wikiartikel wurde FFmpeg in Version n5.0.1 unter Arch Linux verwendet. Die Syntax, Optionen oder Argumente können je nach Version und Betriebssystem abweichen.

Als Beispiel Zielserver wird eine eigene Owncast Instanz gewählt.

Lokales Video streamen

Um mit FFmpeg ein lokales Video an ein Zielserver zu streamen muss an FFmpeg die Quelle mittels -i angegeben werden, sowie das Ziel zum Schluss angehangen werden. Dazwischen können Optionen gesetzt werden. Zum Beispiel, ob das Video vor dem streamen konvertiert werden soll.

ffmpeg -re -i inputfile.mp4 -c:v copy -c:a copy -f flv rtmp://127.0.0.1:1935/live/<streamkey>

Mit dem Befehl von oben liest ffmpeg die datei inputfile.mp4 ein und sendet das Video als flv zum Zielserver, welcher via RTMP auf Port 1935 erreichbar ist. Folgende Optionen wurden an FFmpeg mit angeheftet:

-re Der Input wird mit nativer Bildwiederholungsrate eingelesen.
-i Mittels dieser Option wird der Pfad zur Datei gesetzt.

Wichtig. Der Dateiname darf keine Leerzeichen haben. FFmpeg hat hiermit Probleme, auch wenn man diese escaped.

-c:v copy Gibt an, dass der Video Codec beibehalten werden soll und FFmpeg nichts en/decodieren muss.
-a:v copy Wie beim Video Codec wird auch der Audio Codec beibehalten.
-f flv Mit dieser Option wird das Format FLV erzwungen, welches zwingend beim RTMP Streams ist.