Kompilieren von FFmpeg zu WebAssembly (= ffmpeg.js): Teil 1 - Kochen



Liste der übersetzten Teile der Serie:


  1. Kochen (du bist hier)
  2. Kompilieren mit Emscripten
  3. Konvertiere avi in ​​mp4




Aus diesem Teil lernen Sie:


  1. Warum ist das alles notwendig?
  2. So kompilieren Sie FFmpeg in Docker



Warum ist das alles notwendig?


Die Hauptaufgaben einer Reihe von Veröffentlichungen sind folgende:


  1. Erstellen Sie ein Tutorial zur Verwendung von Emscripten zum Kompilieren von C / C ++ - Bibliotheken in JavaScript (detaillierter und nützlicher als zuvor geschrieben).
  2. Persönliches Memo

Warum ffmpeg?


FFmpeg ist ein kostenloses Open Source-Projekt, das aus einer Vielzahl von Bibliotheken und Programmen zur Verarbeitung von Video-, Audio- und anderen Multimediadateien / -sendungen besteht. (aus Wikipedia)


Eine JavaScript-Bibliothek, die solche Funktionen bereitstellen würde, existiert einfach nicht. Wenn Sie "ffmpeg.js" googeln, finden Sie verschiedene Lösungen, die denen ähneln, die wir tun werden:



Diese Bibliotheken können natürlich verwendet werden, haben aber ihre Nachteile:


  1. Verwendete Versionen von FFmpeg und Emscripten sind veraltet
  2. Projekte werden lange nicht unterstützt

Ursprünglich wollte ich eine der beiden Bibliotheken unterstützen, aber da sich im Laufe der Jahre zu viele Änderungen angesammelt haben, habe ich beschlossen, alles von Grund auf neu zu machen und gleichzeitig ein Tutorial zur Verwendung von Emscripten zum Kompilieren einer großen C / C ++ - Bibliothek zu erstellen.


So kompilieren Sie FFmpeg in Docker


Zuerst klonen wir die FFmpeg-Quellen und da der Hauptzweig für die Entwicklung verwendet wird, wählen wir den Zweig mit einer bestimmten Version aus.


Zum Zeitpunkt des Schreibens des Tutorials ist die neueste Version von FFmpeg 4.1.4, daher werden wir sie verwenden.


$ git clone --depth 1 --branch n4.1.4 https://github.com/FFmpeg/FFmpeg 

--depth 1 ist optional, dies beschleunigt jedoch das Klonen, da nicht alle Commits heruntergeladen werden müssen.


Kompilieren Sie nach erfolgreichem Klonen die Quellen mit gcc, um sicherzustellen, dass alles funktioniert.


Natürlich können Sie diesen Schritt überspringen, aber meiner Erfahrung nach ist es immer gut, zuerst das Build-System zu berühren. (FFmpeg verwendet Standard-Make, das einfacher zu portieren ist als Bazel)


Anweisungen zum Kompilieren und Installieren von FFmpeg finden Sie in der Datei INSTALL.md im Stammverzeichnis:


# FFmpeg installieren:


1. Geben Sie `. / Configure` ein, um die Konfiguration zu erstellen. Die Liste der Konfigurationsoptionen erhalten Sie, indem Sie "configure - help" ausführen.


`configure` kann in einem anderen Verzeichnis als der FFmpeg-Quelle ausgeführt werden. Übergeben Sie dazu den zu konfigurierenden absoluten Pfad, z. `/ ffmpegdir / ffmpeg / configure`.


2. Geben Sie nun `make` ein, um FFmpeg zu erstellen. Sie benötigen GNU Make 3.81 oder höher.


3. Geben Sie "make install" ein, um die Binärdateien und Bibliotheken zu installieren.


HINWEIS
- - -


- Nicht-Systemabhängigkeiten (z. B. libx264, libvpx) sind standardmäßig deaktiviert.


Da wir FFmpeg nicht installieren, sind nur die ersten beiden Schritte erforderlich.


Beim Kompilieren mit gcc erstellen wir mit Docker eine Umgebung, die den gesamten Prozess isoliert und auf verschiedenen Computern einheitlich ist.


Erstellen wir ein Bash-Skript build-with-docker.sh im Stammverzeichnis mit den folgenden Inhalten:


 #!/bin/bash docker pull gcc:4 docker run -it \ -v $PWD:/usr/src \ gcc:9.1 \ sh -c 'cd /usr/src && ./configure --disable-x86asm && make -j4' 

--disable-x86asm muss hinzugefügt werden, wenn ffmpeg danach fragt


Führen Sie das Skript aus:


 $ chmod +x build-with-docker.sh $ ./build-with-docker.sh 

Abhängig von der Geschwindigkeit Ihrer Internetverbindung und Ihrer Hardware dauert die Kompilierung etwa 10 bis 30 Minuten.


Beachten Sie, dass viele Warnungen angezeigt werden, da gcc 9.1 strenger ist als frühere Versionen. Es ist in Ordnung.


Wenn alles erfolgreich abgeschlossen wurde, können Sie versuchen, ffmpeg auszuführen :


 $ ./ffmpeg 

Oder


 $ docker run -it -v $PWD:/usr/src gcc:9.1 /usr/src/ffmpeg 

Sie werden so etwas sehen wie:


ffmpeg Version n4.1.4 Copyright 2000–2019 der FFmpeg-Entwickler
gebaut mit gcc 9.1.0 (GCC)
Konfiguration: - disable-x86asm
libavutil 56.22.100 / 56.22.100
libavcodec 58.35.100 / 58.35.100
libavformat 58.20.100 / 58.20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
Hyperschneller Audio- und Video-Encoder
Verwendung: ffmpeg [Optionen] [[Infile-Optionen] -i Infile] ... {[Outfile-Optionen] Outfile} ...


Verwenden Sie -h, um vollständige Hilfe zu erhalten, oder führen Sie noch besser 'man ffmpeg' aus.


Im nächsten Teil werden wir FFmpeg mit Emscripten kompilieren.

Source: https://habr.com/ru/post/de473098/


All Articles