FFmpeg aus dem Quellcode unter Linux erstellen
Diese Seite erklärt, wie man FFmpeg unter Linux konfiguriert und baut. Dies beinhaltet:
- Holen Sie sich den FFmpeg-Quellcode.
- Installieren Sie die erforderlichen Abhängigkeiten.
- Konfigurieren Sie FFmpeg von der Kommandozeile aus.
- Bauen Sie die Entwicklungsbibliotheken.
Beschaffung des FFmpeg-Quellcodes
Sie können den FFmpeg-Quellcode auf folgende Weise erhalten:
- Download von der FFmpeg Download-Seite.
- Klonen von git. Zum Beispiel klont dieser Befehl die Version 7.1 der FFmpeg-Quellen nach
~/ffmpeg
.$ git clone --branch n7.1 https://git.ffmpeg.org/ffmpeg.git ffmpeg
Es wird empfohlen, die gleiche FFmpeg-Version zu verwenden, wie sie auf der HauptseiteQt Multimedia dokumentiert ist.
In den folgenden Abschnitten wird davon ausgegangen, dass Sie den FFmpeg-Quellcode unter ~/ffmpeg
speichern.
Voraussetzungen
Um FFmpeg zu erstellen, werden diese Werkzeuge und Pakete benötigt:
- Yasm
- Entwicklerpakete für das von Ihnen gewählte Sicherheits-Backend (siehe unten).
Installieren von Paketen
Um die erforderlichen Pakete (einschließlich Yasm für FFmpeg) zu installieren, führen Sie aus:
$ apt-get install yasm
Wenn Sie ein Sicherheits-Backend aktivieren, benötigen Sie zusätzlich das entsprechende Entwickler-Paket, zum Beispiel:
$ apt-get install libssl-dev
Für andere Backends installieren Sie die entsprechenden Pakete:
- Für OpenSSL:
libssl-dev
. - Für GnuTLS:
libgnutls-dev
. - Für LibreSSL (libtls):
libtls-dev
. - Für MbedTLS:
libmbedtls-dev
.
Konfigurieren und Erstellen von FFmpeg
Erstellen Sie ein Verzeichnis build
innerhalb des Verzeichnisses ~/ffmpeg
und navigieren Sie dorthin:
$ mkdir ~/ffmpeg/build $ cd ~/ffmpeg/build
Um FFmpeg zu konfigurieren, führen Sie aus:
$ ../configure --prefix=/usr/local/ffmpeg --disable-doc --enable-network --enable-shared
Das Argument --prefix
gibt einen Pfad an, in dem die FFmpeg-Entwicklungsbibliotheken nach der Erstellung installiert werden. Die Dokumentation wird nicht benötigt, aber die Netzwerkfunktionen sollten aktiviert sein. Um FFmpeg als statische Bibliotheken zu bauen, lassen Sie die Option --enable-shared
weg.
Wenn Sie FFmpeg mit einem Sicherheits-Backend bauen, wählen Sie die entsprechende Option:
$ ../configure --enable-openssl # For OpenSSL $ ../configure --enable-gnutls # For GnuTLS $ ../configure --enable-libtls # For LibreSSL (libtls) $ ../configure --enable-mbedtls # For MbedTLS
Stellen Sie sicher, dass Sie das entsprechende Entwicklerpaket installiert haben, wie bereits erwähnt.
Hardware-Beschleunigung
Standardmäßig wird FFmpeg ohne Hardware-Beschleunigung gebaut, es sei denn, die entsprechenden Pakete sind installiert. Für eine bessere Leistung, insbesondere auf Systemen mit GPU-Unterstützung, wird empfohlen, die VAAPI-Entwicklungspakete zu installieren:
$ apt-get install libva-dev
Dadurch wird FFmpeg in die Lage versetzt, die VAAPI-Unterstützung während der Konfiguration zu erkennen.
Wenn FFmpeg mit NVIDIA-Grafikkarten verwendet werden soll, sollten Sie die NVIDIA-Codec-Header installieren. Diese können aus dem folgenden Repository heruntergeladen werden: NVIDIA Codec Headers auf GitHub.
Um die Header zu erstellen und zu installieren, führen Sie die folgenden Befehle aus:
$ mkdir ~/nv-codec-headers $ cd ~/nv-codec-headers $ git clone https://github.com/FFmpeg/nv-codec-headers.git $ mkdir build $ cd build $ make -j install
Überprüfen Sie die Kompatibilität von nv-codec-headers
mit Ihrer NVIDIA-Treiberversion, da neuere nv-codec-headers
möglicherweise nicht mit älteren Treiberversionen kompatibel sind. Weitere Einzelheiten finden Sie in der offiziellen Dokumentation.
Deaktivieren von Autodetect
Standardmäßig versucht FFmpeg, verfügbare Abhängigkeiten auf dem Build-System automatisch zu erkennen. Dazu gehören Hardware-Beschleunigung und Sicherheits-Backends. Wenn Sie die automatische Erkennung deaktivieren wollen (z.B. um zu vermeiden, dass unnötige Abhängigkeiten kompiliert werden), können Sie dies tun:
$ ../configure --disable-autodetect
Wenn Sie FFmpeg mit zusätzlichen Abhängigkeiten (wie einem Sicherheits-Backend oder Hardware-Beschleunigung) bauen, stellen Sie sicher, dass die erforderlichen Bibliotheken auf dem Zielsystem installiert sind. Es gibt mehrere Möglichkeiten, dies zu tun:
- Liefern Sie die Binärdateien der Abhängigkeiten zusammen mit FFmpeg aus.
- Sicherstellen, dass die erforderlichen Binärdateien auf dem Zielsystem installiert sind.
- Implementieren Sie Bibliotheks-Stubs, die die echten Bibliotheken nachschlagen können und einen Fehlercode zurückgeben, wenn die echten Bibliotheken nicht gefunden werden.
RPATH und RUNPATH unter Linux
Unter Linux verwendet FFmpeg sowohl RPATH- als auch RUNPATH-Metadatenabschnitte, um die Bibliothekspfade zu verwalten. Wir empfehlen, das Dienstprogramm patchelf
zu verwenden, um den korrekten Laufpfad einzustellen:
$ patchelf --set-rpath "new/runpath" lib.so
Standardmäßig ändert patchelf
den RUNPATH, da RPATH unter Linux als veraltet gilt. Um einen relativen Runpath zu setzen, können Sie die Variable $ORIGIN
verwenden, die den Pfad relativ zum Ort der ausführbaren Datei setzt:
$ patchelf --set-rpath "$ORIGIN/../lib" lib.so
Dieser Ansatz stellt die Portabilität sicher, indem er die Bibliotheken auf der Grundlage ihrer relativen Positionen verknüpft.
FFmpeg bauen
Sobald Sie FFmpeg mit den gewünschten Optionen konfiguriert haben, können Sie es erstellen und installieren:
$ make -j install
Wenn der Build ohne Fehler abgeschlossen wird, werden die FFmpeg-Entwicklungsbibliotheken im Verzeichnis /usr/local/ffmpeg
installiert. Sie können dann auf diesen Pfad verweisen, wenn Sie Qt Multimedia konfigurieren, indem Sie die Variable FFMPEG_DIR
setzen.
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.