Compilación de FFmpeg en WebAssembly (= ffmpeg.js): Parte 1 - Cocinar



Lista de partes traducidas de la serie:


  1. Cocinar (estás aquí)
  2. Compilando con Emscripten
  3. Convertir avi a mp4




De esta parte aprenderás:


  1. ¿Por qué es todo esto necesario?
  2. Cómo compilar FFmpeg en Docker



¿Por qué es todo esto necesario?


Las tareas principales de una serie de publicaciones son las siguientes:


  1. Cree un tutorial sobre el uso de Emscripten para compilar bibliotecas C / C ++ en JavaScript (más detallado y útil que lo escrito anteriormente)
  2. Memo personal

¿Por qué ffmpeg?


FFmpeg es un proyecto de código abierto gratuito, que consta de un amplio conjunto de bibliotecas y programas para procesar video, audio y otros archivos / transmisiones multimedia. (de Wikipedia)


Una biblioteca de JavaScript que proporcionaría tales capacidades simplemente no existe. Si buscas en Google "ffmpeg.js", encontrarás varias soluciones similares a lo que vamos a hacer:



Estas bibliotecas, por supuesto, se pueden usar, pero tienen sus inconvenientes:


  1. Las versiones usadas de FFmpeg y Emscripten están en desuso
  2. Los proyectos no son compatibles por mucho tiempo

Inicialmente, planeé brindar soporte para una de las dos bibliotecas, pero como se han acumulado demasiados cambios a lo largo de los años, decidí hacer todo desde cero, creando simultáneamente un tutorial sobre el uso de Emscripten para compilar una gran biblioteca C / C ++.


Cómo compilar FFmpeg en Docker


Primero, clonamos las fuentes FFmpeg, y dado que la rama maestra se usa para el desarrollo, seleccionaremos la rama con una versión específica.


Al momento de escribir el tutorial, la última versión de FFmpeg es 4.1.4, por lo que la usaremos.


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

- la profundidad 1 es opcional, pero esto acelerará la clonación ya que no necesitamos descargar todas las confirmaciones.


Después de una clonación exitosa, compile las fuentes con gcc para asegurarse de que todo funcione.


Por supuesto, puede omitir este paso, pero mi experiencia dice que siempre es bueno tocar primero el sistema de compilación. (FFmpeg usa una marca estándar, que es más fácil de portar que Bazel)


Las instrucciones para compilar e instalar FFmpeg se pueden encontrar en el archivo INSTALL.md ubicado en el directorio raíz:


# Instalar FFmpeg:


1. Escriba `. / Configure` para crear la configuración. La lista de opciones para la configuración se puede obtener ejecutando `configure - help`.


`configure` puede ejecutarse desde un directorio que no sea la fuente FFmpeg. Para hacer esto, pase la ruta absoluta para configurar, p. `/ ffmpegdir / ffmpeg / configure`.


2. Ahora escriba `make` para construir FFmpeg. Necesitará GNU Make 3.81 o superior.


3. Escriba `make install` para instalar los binarios y las bibliotecas.


AVISO
- - -


- Las dependencias que no son del sistema (por ejemplo, libx264, libvpx) están deshabilitadas de forma predeterminada.


Como no instalaremos FFmpeg, solo se necesitan los dos primeros pasos.


Al compilar con gcc, usaremos Docker para crear un entorno que aisle todo el proceso y logre su uniformidad en diferentes máquinas.


Creemos un script bash build-with-docker.sh en el directorio raíz con los siguientes contenidos:


 #!/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 necesita ser agregado ya que ffmpeg lo solicita


Ejecute el script:


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

Dependiendo de la velocidad de su conexión a Internet y su hardware, la compilación tomará entre 10 y 30 minutos.


Tenga en cuenta que verá muchas advertencias, ya que gcc 9.1 es más estricto que las versiones anteriores. Esto es normal


Si todo se completó correctamente, puede intentar ejecutar ffmpeg :


 $ ./ffmpeg 

O


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

Verás algo como:


ffmpeg versión n4.1.4 Copyright 2000–2019 los desarrolladores de FFmpeg
construido con gcc 9.1.0 (GCC)
configuración: - 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
Codificador de audio y video hiperrápido
uso: ffmpeg [opciones] [[opciones de archivo] -i archivo] ... {[opciones de archivo] archivo} ...


Use -h para obtener ayuda completa o, mejor aún, ejecute 'man ffmpeg'


En la siguiente parte, comenzaremos a compilar FFmpeg con Emscripten.

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


All Articles