Comando FFmpeg para converter MP3 em AAC

21

Eu posso emitir este comando:

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.m4a 

para criar um arquivo m4a.

Mas quando eu emito este comando

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.aac

ffmpeg está lançando um erro dizendo

Não foi possível gravar o cabeçalho do arquivo de saída # 0 (parâmetros de codec incorretos?).

Além disso, o tamanho do arquivo m4a é realmente quase 5,8 vezes maior que o arquivo original, o que não é absolutamente o que eu queria e o motivo pelo qual queria converter para o AAC.

Soham Dasgupta
fonte

Respostas:

38

Como posso converter para AAC?

Este é o comando FFmpeg mais básico para converter entrada em áudio AAC usando a mais alta qualidade que o AAC FFmpeg possui. libfdk_aacé o codificador Fraunhofer AAC e está disponível quando você compila o FFmpeg com suporte para ele.

ffmpeg -i input.mp3 -c:a libfdk_aac output.m4a

Para alterar a qualidade, você tem duas opções:

  • Para taxa de bits variável (VBR), use a -vbropção Por exemplo, -vbr 4é uma boa escolha (aproximadamente 128 kBit / s para áudio estéreo). Maior significa melhor. Os valores variam de 1 a 5.

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
    
  • Para taxa de bits fixa (CBR), use a -b:aopção, por exemplo -b:a 128k. 128 kBit / s deve ser bom o suficiente para a maioria das situações. Você também pode escolher algo mais baixo.

    ffmpeg -i input.mp3 -c:a libfdk_aac -b:a 128k output.m4a
    

Você também pode usar HE-AAC (v1 / v2) em vez do perfil padrão AAC-LC (baixa complexidade), que é mais adequado para taxas de bits baixas:

ffmpeg -i input.mp3 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a

E se eu não tiver libfdk_aac?

Algumas versões do FFmpeg não possuem libfdk_aac(por motivos de licença). Se for esse o caso, você pode usar o codificador AAC embutido:

ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a

Este codificador não suporta VBR corretamente, portanto, se você precisar disso ou HE-AAC, continue lendo.

Você pode compilar o ffmpeg e adicionar libfdk_aacsuporte. Existem guias no Wiki do FFmpeg . Compilar é fácil no Linux, moderadamente fácil no OS X e bastante difícil no Windows. Quando você segue os guias de compilação e instala as bibliotecas apropriadas antes, o FFmpeg agora oferece a opção de uso libfdk_aac.


Houve alguns problemas com sua abordagem original:

  • alacnão é AAC. ALAC é o Apple Lossless Audio Codec , enquanto AAC é Advanced Audio Coding .

  • É por isso que sua saída é maior que a entrada, porque, ao contrário do MP3, o ALAC ainda está compactado, mas precisa ser sem perdas - é por isso que ele precisa armazenar mais dados.

  • .aacnão é um contêiner de saída para áudio ALAC. Se você usa o AAC, isso deve funcionar. Eu usaria MP4 ou M4A embora.

slhck
fonte
No Ubuntu 12.04 eu não consegui usar uma opção -c:a, isso tem algum sinônimo? Eu acho que pode significar, -acodec:amas no final, acabei de soltá-lo e ffmpegconsegui deduzir um codec com base no nome do arquivo de saída desejado. ( -strict experimentalPorém, é necessário ; e nos -map_metadata 0:0
esforçamos
Também digno de nota: eu queria arquivos M4B (audiolivros), que ffmpegparecem não suportar, mas converter em M4A e depois renomear parece funcionar.
Tripleee
@tripleee Isso significa que você está usando um programa desatualizado chamado ffmpeg, mas na verdade não é do FFmpeg, mas do fork do Libav. Infelizmente, o Ubuntu o empacotou em vez do ffmpeg "real". Veja: Quem pode me dizer a diferença e relação entre ffmpeg, libav e avconv
slhck
@slhck: Obrigado pela atualização rápida e pelo link!
Tripleee
11
@tripleee Na verdade, nenhum arquivo .m4a é idêntico ao .mp4 (é apenas uma convenção de nomeação para arquivos mp4 apenas com áudio), mas tem um formato diferente de .aac (conhecido como fluxo ADTS). Você também pode forçar o FFmpeg a sair no formato ADTS adicionando -f adts.
Bigue Nique 22/03
4

Conversão fácil para AAC para Zeranoe Windows Builds

ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a

Use "aac" em vez de libfaac ou libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

"O FFmpeg pode suportar três codificadores AAC-LC (aac, libfaac, libfdk_aac) e um codificador HE-AAC (v1 / 2) (libfdk_aac). As licenças do libfaac e libfdk_aac não são compatíveis com a GPL, portanto, a GPL não permite distribuição de binários contendo código licenciado sob essas licenças quando também estiver incluído o código licenciado pela GPL. "

SaltySub2
fonte
2
libfaacO suporte também foi removido a partir do 3.2.
slhck