Compartilhe que você está se especializando

O FFmpeg é praticamente o canivete suíço do processamento de áudio e vídeo, sendo muito utilizado em fluxos de conversão de mídia, players, serviços de streaming e aplicações desktop. No entanto, em alguns casos (como ao utilizá-lo com o codec H.264, que é coberto por patentes), o FFmpeg passa a estar sob a licença GPL e isso faz com que todo o seu produto também precise seguir a GPL, gerando obrigações de abertura de código, possíveis royalties (dependendo do modelo de distribuição) e riscos jurídicos ou restrições comerciais.

Além disso, para o FFmpeg atender a qualquer cenário, ele precisa conter dezenas de codecs, vários formatos de container, filtros e protocolos de streaming que, muitas vezes, não são utilizados, gerando um produto grande e seu tamanho pode atrapalhar alguns projetos. Por isso, usar o FFmpeg “padrão” nem sempre é a melhor escolha, esse foi exatamente o cenário encontrado em um produto que explicadmos em Como reduzir apresentações do PowerPoint sem perder qualidade, cujo objetivo era reduzir o tamanho dos arquivos finais, principalmente por meio da recompressão dos vídeos embutidos.

Nesse contexto, criar sua própria versão customizada do FFmpeg, apenas com o que é necessário, gera um aplicativo menor, mais leve, com maior controle sobre licenciamento e distribuição, assim como um comportamento totalmente alinhado às necessidades do produto. Neste artigo, vamos mostrar como fazer isso.

Compilando um FFmpeg sob medida

A Estratégia geral será desabilitar tudo por padrão e habilitar apenas o necessário (que não necessite de licenças) e transformando o FFmpeg em um pacote de pequeno. Além disso, usando esse pacote será fácil de manter, já que o FFmpeg deixará de ser uma “caixa-preta gigante” e passará a ser um componente sob controle total do time.

Para isso, baixe e instale o MSYS2. Ao final abra o “MSYS2 MinGW64” (precisa ser ele) e execute:

pacman -Syu

Confirme as atualizações, irá fechar o msys2 e você precisará abrir novamente, agora execute:

pacman -Syu
pacman -Su

Agora, para instalar toolchain e dependências mínimas, execute nesse shell:

pacman -S --needed \
base-devel \
git \
make \
pkg-config \
diffutils \
yasm nasm \
mingw-w64-x86_64-gcc \
mingw-w64-x86_64-openh264
mingw-w64-x86_64-toolchain \
mingw-w64-x86_64-pkgconf \
mingw-w64-x86_64-nasm \
mingw-w64-x86_64-cmake

Agora, vamos nos preparar para compilar o FFmpeg, entre na pasta e limpe builds anteriores (caso exista):

cd /home/$USERNAME
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ~/ffmpeg
make distclean || true
git pull --rebase

E finalmente, para configurar como queremos nosso FFmpeg e compilar, execute:

./configure \
--prefix=/mingw64/minimal_ffmpeg_no_lgpl \
--target-os=mingw64 \
--arch=x86_64 \
--disable-everything \
--enable-ffmpeg \
--disable-debug \
--disable-doc \
--enable-small \
--enable-static \
--disable-shared \
--disable-gpl \
--disable-nonfree \
--disable-indevs \
--disable-outdevs \
--enable-libopenh264 \
--pkg-config-flags="--static" \
--enable-protocol=file,pipe \
--enable-demuxer=mov,mp4,avi,asf \
--enable-muxer=mp4,mov \
--enable-parser=h264,aac \
--enable-decoder=h264,aac,wmv1,wmv2,wmv3,wmav1,wmav2,mpeg4,msmpeg4v3 \
--enable-encoder=libopenh264,aac \
--enable-filter=scale,aresample,anull \
--extra-cflags="-O2 -pipe -ffunction-sections -fdata-sections" \
--extra-ldflags="-Wl,--gc-sections -static -static-libgcc -static-libstdc++ -s -lopenh264"

E compile a versão desse pacote, com os ajutestes feitos, com o comando:

make -j$(nproc)
make install

Agora copie esse arquivo criado (se você instalou no C:\ o seu arquivo ffmpeg.exe deve ser na pasta C:\msys2\mingw64\minimal_ffmpeg_no_lgpl\bin)

Fontes/Referências

NVLAN – Como reduzir apresentações do PowerPoint sem perder qualidade

https://www.msys2.org

Mais Informações

Esperamos ter te ajudado e estaremos sempre a disposição para mais informações.

Se você tem interesse em algum assunto específico, tem alguma dúvida, precisa de ajuda, ou quer sugerir um post, entre em contato conosco pelo e-mail equipe@nvlan.com.br.

NVLAN - Consultoria