Comando FFmpeg para convertir MP3 a AAC

21

Puedo emitir este comando:

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

para crear un archivo m4a.

Pero cuando publico este comando

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

ffmpeg arroja un error que dice

No se pudo escribir el encabezado para el archivo de salida # 0 (¿parámetros de códec incorrectos?).

Además, el tamaño del archivo m4a es realmente casi 5,8 veces más grande que el archivo original, que no es absolutamente lo que quería y por qué quería convertirlo a AAC.

Soham Dasgupta
fuente

Respuestas:

38

¿Cómo puedo convertir a AAC?

Este es el comando FFmpeg más básico para convertir la entrada al audio AAC utilizando la más alta calidad que tiene AAC FFmpeg. libfdk_aaces el codificador Fraunhofer AAC, y está disponible cuando compiló FFmpeg con soporte para él.

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

Para cambiar la calidad, tiene dos opciones:

  • Para tasa de bits variable (VBR), use la -vbropción Por ejemplo, -vbr 4es una buena opción (aproximadamente 128 kBit / s para audio estéreo). Más alto significa mejor. Los valores varían de 1 a 5.

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
    
  • Para tasa de bits fija (CBR), use la -b:aopción, por ejemplo -b:a 128k. 128 kBit / s debería ser lo suficientemente bueno para la mayoría de las situaciones. A menudo puedes elegir algo más bajo también.

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

También puede usar HE-AAC (v1 / v2) en lugar del perfil predeterminado AAC-LC (baja complejidad), que es el más adecuado para bajas tasas de bits:

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

¿Qué pasa si no tengo libfdk_aac?

Algunas versiones de FFmpeg no tienen libfdk_aac(por razones de licencia). Si ese es el caso, puede usar el codificador AAC incorporado:

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

Este codificador no es compatible con VBR correctamente, así que si necesita eso o HE-AAC, siga leyendo.

Puede compilar ffmpeg usted mismo y agregar libfdk_aacsoporte. Hay guías en el Wiki de FFmpeg . Compilar es fácil en Linux, moderadamente fácil en OS X y bastante difícil en Windows. Cuando sigas las guías de compilación e instales las bibliotecas apropiadas antes, FFmpeg ahora te da la opción de usar libfdk_aac.


Hubo algunos problemas con su enfoque original:

  • alacNo es AAC. ALAC es el códec de audio sin pérdida de Apple , mientras que AAC es codificación de audio avanzada .

  • Es por eso que su salida es más grande que la entrada, porque a diferencia de MP3, ALAC todavía está comprimido, pero debe ser sin pérdidas, es por eso que necesita almacenar más datos.

  • .aacno es un contenedor de salida para audio ALAC. Si usa AAC, eso debería funcionar. Sin embargo, usaría MP4 o M4A.

slhck
fuente
En Ubuntu 12.04 no pude usar una opción -c:a, ¿tiene algún sinónimo? Supongo que podría significar, -acodec:apero al final lo dejé caer y ffmpegpude deducir un códec basado en el nombre del archivo de salida deseado. (Sin -strict experimentalembargo, es necesario; y lo arrojé -map_metadata 0:0por si
acaso
También vale la pena señalar: quería archivos M4B (audiolibros), que ffmpegno parecen admitir, pero la conversión a M4A y luego simplemente cambiar el nombre parece funcionar.
tripleee
@tripleee Eso significa que está utilizando un programa obsoleto llamado ffmpeg, pero realmente no es de FFmpeg, sino de la bifurcación de Libav. Ubuntu desafortunadamente lo incluyó en lugar del ffmpeg "real". Ver: ¿Quién me puede decir la diferencia y la relación entre ffmpeg, libav y avconv?
slhck
@slhck: ¡Gracias por la rápida actualización y el enlace!
tripleee
1
@tripleee En realidad no, los archivos .m4a son idénticos a .mp4 (es solo una convención de nomenclatura para archivos mp4 solo con audio), pero tienen un formato diferente que .aac (que se conoce como flujo ADTS). También puede forzar la salida de FFmpeg en formato ADTS agregando -f adts.
Bigue Nique
4

Fácil conversión a AAC para Zeranoe Windows Builds

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

Use "aac" en lugar de libfaac o libfdk_aac: https://trac.ffmpeg.org/wiki/Encode/AAC

"FFmpeg puede admitir tres codificadores AAC-LC (aac, libfaac, libfdk_aac) y un codificador HE-AAC (v1 / 2) (libfdk_aac). Las licencias de libfaac y libfdk_aac no son compatibles con la GPL, por lo que la GPL no permite distribución de binarios que contienen código con licencia bajo estas licencias cuando también se incluye el código con licencia GPL ".

SaltySub2
fuente
2
libfaacEl soporte también se ha eliminado a partir de 3.2.
slhck