Compilando o FFmpeg no WebAssembly (= ffmpeg.js): Parte 1 - Culinária



Lista de partes traduzidas da série:


  1. Culinária (você está aqui)
  2. Compilando com o Emscripten
  3. Converter avi para mp4




Nesta parte, você aprenderá:


  1. Por que tudo isso é necessário?
  2. Como compilar o FFmpeg no Docker



Por que tudo isso é necessário?


As principais tarefas de uma série de publicações são as seguintes:


  1. Crie um tutorial sobre o uso do Emscripten para compilar bibliotecas C / C ++ em JavaScript (mais detalhado e útil do que anteriormente escrito)
  2. Nota pessoal

Por que ffmpeg?


O FFmpeg é um projeto de código aberto gratuito que consiste em um extenso conjunto de bibliotecas e programas para processamento de vídeo, áudio e outros arquivos / transmissões multimídia. (da Wikipedia)


Uma biblioteca JavaScript que forneceria esses recursos simplesmente não existe. Se você pesquisar no “ffmpeg.js”, encontrará várias soluções semelhantes ao que vamos fazer:



Essas bibliotecas, é claro, podem ser usadas, mas têm suas desvantagens:


  1. As versões usadas do FFmpeg e do Emscripten estão obsoletas
  2. Os projetos não são suportados há muito tempo

Inicialmente, planejei começar a oferecer suporte a uma das duas bibliotecas, mas, como muitas mudanças foram acumuladas ao longo dos anos, decidi fazer tudo do zero, criando simultaneamente um tutorial sobre o uso do Emscripten para compilar uma grande biblioteca C / C ++.


Como compilar o FFmpeg no Docker


Primeiro, clonamos as fontes do FFmpeg e, como o ramo principal é usado para o desenvolvimento, selecionamos o ramo com uma versão específica.


No momento da redação do tutorial, a versão mais recente do FFmpeg é a 4.1.4, por isso vamos usá-lo.


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

--thth 1 é opcional, mas isso acelerará a clonagem, pois não precisamos fazer o download de todas as confirmações.


Após a clonagem bem-sucedida, compile as fontes com o gcc para garantir que tudo funcione.


Claro, você pode pular esta etapa, mas minha experiência diz que é sempre bom tocar no sistema de compilação primeiro. (O FFmpeg usa make padrão, que é mais fácil de portar que o Bazel)


Instruções para compilar e instalar o FFmpeg podem ser encontradas no arquivo INSTALL.md, localizado no diretório raiz:


# Instale o FFmpeg:


1. Digite `. / Configure` para criar a configuração. A lista de opções para configuração pode ser obtida executando `configure - help`.


O `configure` pode ser executado a partir de um diretório que não seja a fonte FFmpeg. Para fazer isso, passe o caminho absoluto para configurar, por exemplo `/ ffmpegdir / ffmpeg / configure`.


2. Agora digite `make` para criar o FFmpeg. Você precisará do GNU Make 3.81 ou superior.


3. Digite `make install` para instalar os binários e bibliotecas.


AVISO
- - -


- Dependências que não são do sistema (por exemplo, libx264, libvpx) são desativadas por padrão.


Como não instalaremos o FFmpeg, apenas as duas primeiras etapas são necessárias.


Ao compilar com o gcc, usaremos o Docker para criar um ambiente que isole todo o processo e atinja sua uniformidade em diferentes máquinas.


Vamos criar um script bash build-with-docker.sh no diretório raiz com o seguinte conteúdo:


 #!/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 precisa ser adicionado quando o ffmpeg solicitar


Execute o script:


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

Dependendo da velocidade da sua conexão à Internet e do seu hardware, a compilação levará cerca de 10 a 30 minutos.


Observe que você verá muitos avisos, pois o gcc 9.1 é mais rígido que as versões anteriores. Isso é normal.


Se tudo foi concluído com êxito, você pode tentar executar o ffmpeg :


 $ ./ffmpeg 

Ou


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

Você verá algo como:


ffmpeg versão n4.1.4 Copyright 2000–2019 os desenvolvedores do FFmpeg
construído com o gcc 9.1.0 (GCC)
configuração: - disable-x86asm
libavutil 56.22.100 / 56.22.100
libavcodec 58.35.100 / 58.35.100
libavformat 58.20.100 / 58.20.100
dispositivo de biblioteca 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 áudio e vídeo hiper-rápido
uso: ffmpeg [opções] [[opções de infile] -i infile] ... {[opções de outfile] outfile} ...


Use -h para obter ajuda completa ou, melhor ainda, execute 'man ffmpeg'


Na próxima parte, começaremos a compilar o FFmpeg com o Emscripten.

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


All Articles