É geralmente aceito que, devido a razões de licenciamento, os executáveis Windows pré-compilados do FFmpeg saem da caixa com codificadores de qualidade inferior - particularmente quando se trata do codificador AAC padrão e do resampler padrão .
De acordo com essas fontes, a solução é compilar o programa a partir do código-fonte:
O FFmpeg suporta dois codificadores AAC-LC (aac e libfdk_aac) e um codificador HE-AAC (v1/2) (libfdk_aac). A licença de libfdk_aac não é compatível com GPL, portanto, a GPL não permite a distribuição de binários contendo código incompatível quando o código licenciado pela GPL também está incluído. Portanto, este codificador foi designado como "não livre" e você não pode baixar um ffmpeg pré-construído que o suporte. Isso pode ser resolvido compilando você mesmo o ffmpeg ...
A biblioteca de codecs Fraunhofer FDK AAC. Este é atualmente o codificador AAC de mais alta qualidade disponível com ffmpeg. Requer que o ffmpeg seja configurado com --enable-libfdk-aac (e adicionalmente --enable-nonfree se você também estiver usando --enable-gpl).
...
Se você deseja o FDK-AAC , você mesmo deve compilar o handbrake . Eu fiz isso e o áudio está ótimo agora.
Já tenho o Cygwin disponível em minha máquina e prefiro usá-lo para compilar o programa em vez de configurar outro ecossistema de software ou gravar uma distribuição Linux inteira.
Como posso usar o Cygwin para compilar o FFmpeg com melhores bibliotecas externas?
Isso é mais fácil dizer do que fazer e levei mais de um mês para descobrir como fazer sem problemas, mas gastei tempo suficiente nisso e decidi documentar o processo bem o suficiente para ser concluído praticamente sem problemas por alguém me seguindo.
Infelizmente, a cadeia de ferramentas padrão do Cygwin (ou seja, o
gcc-core
pacote incluído com o instalador do Cygwin) é inerentemente quebrada para fins de compilação cruzada, e não parece haver nenhuma intenção dos mantenedores do Cygwin de consertar isso, então atualmente, a única maneira de compilar software para Windows com Cygwin é configurar uma cadeia de ferramentas MinGW-w64 sob ele. Felizmente, isso é tão fácil quanto instalar alguns pacotes. Depois disso, compilaremos os pacotes restantes, antes de usar uma combinação de ambos para compilar o próprio FFmpeg.Usando este guia
Seguir este guia na íntegra criará uma instalação estática do FFmpeg com bibliotecas externas, como ,
fdk-aac
e o resampler SOX. Posso considerar adicionar instruções para compilar bibliotecas externas específicas ao guia se receber solicitações suficientes para fazer isso para uma biblioteca específica.libopus
x265
As dependências usadas por este guia - compostas pela própria cadeia de ferramentas de compilação cruzada MinGW-w64, todos os pacotes instalados por
apt-cyg
e todos os pacotes compilados a partir do código-fonte - consumirão até 2,8 GB de espaço em disco, embora o guia também inclua comandos para limpar tudo, exceto a instalação do FFmpeg, uma vez concluída. A própria instalação, composta pelos binários e documentação, ocupa pouco mais de 200 MB de espaço em disco.Este guia criará uma pasta em seu diretório Home chamada
ffmpeg_sources
, onde fará o download e compilará todos os pacotes que estão sendo compilados a partir do código-fonte. O FFmpeg será instalado em/usr/local
, onde o padrão FHS recomenda que o software compilado pelo usuário seja instalado. Esse local também tem a vantagem secundária de estar no sistemaPATH
por padrão no Cygwin e, portanto, não requer que a$PATH
variável de ambiente seja atualizada.Instalar dependências do gerenciador de pacotes
Para começar, baixe a versão mais recente do instalador do Cygwin para instalar os pacotes
wget
,tar
e . A boa notícia é que esses pacotes são dependências de uma ferramenta que pode impedir que você precise usar o instalador do Cygwin novamente.gawk
git
Instale o
apt-cyg
gerenciador de pacotesEm seguida, instale o fork de kou1okada do gerenciador de pacotes apt-cyg . Se você atualmente não usa um gerenciador de pacotes para o Cygwin, esta etapa não apenas facilitará o restante do guia, mas também fará com que sua experiência com o Cygwin rivalize com a de qualquer distribuição Linux.
Mesmo se você já usa um gerenciador de pacotes para Cygwin, como um fork diferente do original
apt-cyg
, eu recomendo que você o substitua por este, que é um software muito mais completo em comparação com o original, bem como o único gerenciador de pacotes para Cygwin que está atualmente em desenvolvimento ativo.Para instalar o kou1okada
apt-cyg
:Instalar ferramentas de compilação e configurar o compilador cruzado MinGW-w64
Compile as dependências
Cada seção abaixo compila uma biblioteca externa que permitirá compilar o FFmpeg com suporte para essa biblioteca habilitada. Copie e cole todo o comando em seu shell.
Se você decidir que não precisa que sua compilação do FFmpeg suporte uma determinada biblioteca, pule sua seção e remova a linha correspondente ao compilar o FFmpeg no estágio final deste guia.
--enable-package
Crie um diretório na raiz da instalação do Cygwin com o seguinte:
Este é o diretório para o qual faremos o download do nosso código-fonte e de onde o compilaremos.
libmp3lame
Para compilar o codec de áudio LAME para MP3:
libx264
Para compilar o codec de vídeo x264:
libx265
Para compilar o codec de vídeo x265:
libogg/libvorbis
O formato Ogg é uma dependência do codec de áudio Vorbis, portanto, precisará ser compilado antes dele:
Em seguida, compile o Vorbis normalmente:
libaom
Para compilar o codificador de vídeo AV1:
libopus
Para compilar o codificador de áudio Opus:
libfdk-aac
Para compilar o codificador Fraunhofer FDK para AAC:
libsoxr
Para compilar a biblioteca do reamostrador SOX, você primeiro precisará criar um arquivo de cadeia de ferramentas CMAKE para a cadeia de ferramentas MinGW-w64, pois o projeto não inclui um por padrão.
Crie um novo arquivo no diretório raiz do Cygwin e chame-o
toolchain-x86_64-mingw32.cmake
(verifique se o Windows está mostrando as extensões e se a extensão é.cmake
).Copie e cole o seguinte no arquivo:
Agora você pode compilar o reamostrador SOX normalmente:
Compilar o binário FFmpeg
Resta apenas compilar o próprio FFmpeg, usando as bibliotecas baixadas ou compiladas acima:
Lembre-se de remover
--enable-\*package\*
as linhas de cada pacote na lista acima para o qual você não baixou ou compilou uma biblioteca.A compilação do FFmpeg levará muito mais tempo do que a compilação das bibliotecas externas, mas, uma vez concluída, você deve ter um binário totalmente funcional ativado com todas as bibliotecas com as quais você o compilou. Para executá-lo, basta executar
ffmpeg
no terminal Cygwin.Limpar/desinstalar
A essa altura do guia, você terá ocupado cerca de 2,8 GB de espaço em disco com download, instalação e compilação. A maior parte disso agora é redundante e deve ser limpa. Mais de 2,6 GB dele podem ser eliminados com segurança, o que reduz a pegada total de nossa instalação FFmpeg para apenas 200 MB.
Limpeza pós-instalação
A execução do seguinte liberará mais de 2,3 GB de espaço em disco:
As well as removing the
ffmpeg_sources
directory and unneeded static libraries, this will also remove any packages installed earlier that are no longer needed, except for those that are commonly needed for building tools on Cygwin/Linux.Remove the cross-compiler
If you no longer intend to compile any other programs using the MinGW-w64 cross-compiling toolchain built earlier in this guide, you can safely uninstall it, as well as all the remaining packages installed earlier:
This will free up an additional ~450 MB of space.
Uninstalling FFmpeg
If you ever need to reverse all of the steps in this guide and purge the FFmpeg binaries from your system, simply run the following:
This will remove everything installed during the process of this guide, and revert your system to exactly how it was before starting it.
Instead of doing everything manually, you can use the
media-autobuild_suite
for Windows, which builds FFmpeg with almost all of its dependencies:The script gets continuously updated, and for most users, it will be the preferred way to get FFmpeg compiled under Windows.