Contempo: Encodear audio con FFmpeg

Encodear audio con FFmpeg

Anteriormente vi como desmenuzar el video en Linux, con MEncoder y MPlayer, pero esta vez hablaré sobre como encodear audio con FFmpeg.

Instalar FFmpeg


En Linux los encoders nativos se pueden encontrar en sus repositorios. Para FFmpeg, en Ubuntu/elementary OS agregan un PPA con FFmpeg actualizado, e instala FFmpeg.

En OS X instalan FFmpeg usando Homebrew. Y para agregar los codecs que faltan:
brew reinstall ffmpeg --with-faac --with-fdk-aac --with-opus --with-libvorbis

Encodeando WAV a MP3/AAC/Vorbis/Opus/FLAC


Ya teniendo archivos WAV (o cualquier lossless), se puede encodear a un codec de audio comprimido con pérdida o sin pérdida. Aparecen varios encoders específicos y también FFmpeg, el cual utiliza los mismos encoders.

Usa VBR

La mejor manera de mantener una calidad de audio a través de toda la pista es usando un bitrate variable VBR, el cual utiliza solo los bits necesarios para preservar la calidad de audio. Por otro lado, encodear con bitrate constante CBR desperdiciaría bits y sería poco eficiente al otorgar a toda la pista la misma cantidad de bits, encodea a ciegas dando lo mismo a todo.

WAV a MP3 (VBR)

Para encodear con el codec MP3 hay que utilizar el encoder LAME, el cual utiliza un rango de calidad entre 0 a 9, siendo 0 lo mejor y 9 lo peor:
lame audio.wav -V 0 audio.mp3

En FFmpeg el VBR tiene el mismo rango:
ffmpeg -i audio.wav -c:a libmp3lame -q:a 0 audio.mp3

WAV a MP3 (CBR)

Si quieren desperdiciar espacio o limitar bits, pueden encodear con bitrate variable CBR. Con la opción "--preset insane" se puede usar 320 CBR (la opción "-b 320 --cbr" tiene el mismo efecto y puede cambiar de numero):
lame audio.wav --preset insane audio.mp3

En FFmpeg pueden usar CBR también:
ffmpeg -i audio.wav -c:a libmp3lame -b:a 320k audio.mp3

WAV a AAC (VBR)

El encoder FAAC utiliza el codec AAC con bitrate variable VBR. Funciona con porcentajes de calidad entre 10 a 500, siendo 10 lo más bajo en calidad y 500 lo más alto (también pueden utilizar contenedor .m4a):
faac audio.wav -q 500 -o audio.aac

En FFmpeg se usa igual:
ffmpeg -i audio.wav -c:a libfaac -q:a 500 audio.aac

Actualmente el encoder fdk-aac es el mejor. Tiene un rango de calidad entre 1 a 5, siendo 1 lo más bajo y 5 lo más alto en calidad:
ffmpeg -i audio.wav -c:a libfdk_aac -vbr 5 audio.aac

WAV a Vorbis (VBR)

El paquete de aplicaciones vorbis-tools trae consigo el encoder Oggenc, y puede utilizar el codec libre Vorbis. Tiene un rango de calidad de bitrate variable VBR entre 0 a 10, siendo 0 lo peor y 10 lo mejor (aunque 9 llega a los 320Kbps y 10 a los 500Kbps):
oggenc audio.wav -q 9 -o audio.ogg

En FFmpeg se usa así:
ffmpeg -i audio.wav -c:a libvorbis -q:a 9 audio.ogg

WAV a Opus (VBR)

El paquete opus-tools trae el encoder opusenc, el cual utiliza el codec Opus y ejecuta por defecto un bitrate variable VBR. El rango de calidad ya viene activado por defecto en máxima calidad, solo hay que otorgar un bitrate máximo variable VBR, en este caso 320Kbps (llega hasta 510 y también pueden utilizar contenedor .ogg):
opusenc audio.wav --vbr --bitrate 320 audio.opus

En FFmpeg el encoder libopus actúa igual, solo se otorga un bitrate máximo variable VBR:
ffmpeg -i audio.wav -c:a libopus -vbr on -b:a 320k audio.opus

WAV a FLAC (Lossless)

El codec FLAC mantiene el audio sin pérdidas de calidad (Lossless), intacto internamente. Su encoder del mismo nombre, tiene un rango de compresión de archivo entre 0 a 8, siendo 0 menos comprimido y 8 más comprimido. Por defecto usa el rango 5 el cual otorga mejor equilibrio entre tiempo de encodeo y peso (también pueden utilizar contenedor .ogg):
flac audio.wav -5 -o audio.flac

En FFmpeg pueden usar flac también (rango 5 viene por defecto):
ffmpeg -i audio.wav -c:a flac audio.flac

Descomprimir cualquier codec a WAV


Para pasar cualquiera de los codecs MP3, AAC, Vorbis, Opus a WAV. Por defecto lo deja en 16bit (pcm_s16le) de profundidad, pero dependiendo de la fuente (Blu-ray) se puede usar 24bit:
ffmpeg -i audio.mp3 audio.wav 
ffmpeg -i audio.mp3 -c:a pcm_s24le audio.wav

Extras


Para ver información del audio utiliza mediainfo, ffprobe o file:
mediainfo audio.mp3 
ffprobe audio.mp3 
file audio.mp3

Unir audios

Para unir dos archivos de audio se puede realizar lo siguiente:
cat audio1.mp3 audio2.mp3 > audiopegado.mp3

En FFmpeg sería algo así:
ffmpeg -i audio1.mp3 -i audio2.mp3 -c:a copy audiopegado.mp3