FFMPEG: Convierte archivos m4a a mp3 sin pérdida significativa de información / calidad. Bitrate automatizado

45

Tengo una carga de archivos de audio (alrededor de 1000) que quiero convertir de m4a a mp3 para poder usarlos en un reproductor de CD que tenga un puerto USB.

Intenté hacer algo simple como: ffmpeg -i FILE.m4a FILE.mp3pero esto parece reducir la tasa de bits a un valor muy bajo, que no es lo que quiero.

Del mismo modo, no quiero convertir usando una tasa de bits constante, como 320k, porque algunos de los archivos que estoy convirtiendo son 320k m4a y otros son de tan baja calidad como 96k m4a.

Parece que no tiene sentido forzar 320k, ya que algunos archivos serán mucho más grandes de lo necesario. Del mismo modo, no tiene sentido destruir todos mis archivos de 320k convirtiéndolos en algo mucho más bajo que 96k. (En este momento, los archivos se están convirtiendo a aproximadamente 50k).

¿Alguien sabe cómo puedo hacer esto? Lo que realmente quiero hacer es decirle a ffmpeg que convierta todos los archivos m4a de un directorio en mp3 mientras conserva la mejor calidad de audio actual. (Por supuesto, es probable que haya algunas pérdidas adicionales por la conversión de formatos de archivo con pérdida a pérdida).

Gracias por tu ayuda. Si esto no es posible, ¿hay algún tipo de script que pueda detectar la calidad requerida al convertir archivos individualmente?

PD: Estoy trabajando en una Mac de Intel, pero también tengo una caja de Ubuntu.

usuario3728501
fuente

Respuestas:

51

VBR

Puede usar la -qscale:aopción ffmpegpara crear una salida MP3 con velocidad de bits variable (VBR). Desde FFmpeg Wiki: codificación de audio mp3 VBR (velocidad de bits variable) :

Control de calidad con -qscale:a(o el alias -q:a). Los valores son específicos del codificador, por lo que para libmp3lame el rango es 0-9 donde un valor más bajo es una calidad más alta. 0-3 normalmente producirá resultados transparentes, 4 (predeterminado) debe estar cerca de la transparencia perceptiva y 6 generalmente produce una calidad "aceptable". La opción -qscale:aestá asignada a la -Vopción en la herramienta de interfaz de línea de comandos cojo independiente.

Tendrá que experimentar para ver qué valor es aceptable para usted. Consulte también Audio de hidrógeno: configuración recomendada del codificador LAME .

Codificación de múltiples archivos

Puede usar un Bash "for loop" para codificar todos los archivos en un directorio:

$ mkdir newfiles
$ for f in *.m4a; do ffmpeg -i "$f" -codec:v copy -codec:a libmp3lame -q:a 2 newfiles/"${f%.m4a}.mp3"; done

Obtener ffmpeg

Se recomienda usar una compilación reciente de ffmpegsi es posible. Consulte la página de descarga de FFmpeg para ver enlaces a compilaciones para OS X, Linux y Windows. También puede seguir una guía para compilar FFmpeg .

lema
fuente
1
Bien, gracias, los comandos funcionaron pero no creo que esté haciendo lo que quería. He configurado -q: a 0, que está haciendo lo que esperaba para m4a de mayor calidad (produciendo archivos grandes con velocidades de vbr más altas) pero creo que los archivos de menor calidad todavía se están convirtiendo en archivos grandes, con vbr de aproximadamente 250-260 kb / s. Hubiera esperado que los archivos que tienen aproximadamente 96k en formato m4a se conviertan a una tasa de bits similar con el codificador lame en modo vbr. ¿Asumo que no he entendido bien cómo funciona el modo de codificación vbr?
user3728501
21

Use FFmpeg (también hay versiones GUI disponibles, pero mi respuesta se refiere solo a la línea de comandos)

  1. MP3 está oficialmente descontinuado (a partir de 2017 ), códec obsoleto y muerto. Internet ya se ha cambiado a AAC ( códec más eficiente y de calidad) y se recomienda a todos usar ese códec:

    ffmpeg -i filenameee.m4a -acodec copy output.aac
    
  2. Sin embargo, si por alguna razón aún necesita MP3 (porque todavía es compatible con más dispositivos):

    ffmpeg -i filenameee.m4a -acodec libmp3lame -ab 256k output.mp3
    
T.Todua
fuente
44
Dado que la pregunta es sobre la calidad, tal vez sea beneficioso si se convierte a 256k en lugar de 128.
VessoVit
3

Esto funcionó para mí:

ffmpeg -i testing.m4v -b:a 192K -vn testing.mp3
usuario205987
fuente
1

Utilizando las respuestas existentes como base, escribí un script bash que debería hacer exactamente lo que la pregunta hace en una máquina Ubuntu (probado en 16.04). Deberá instalar el avprobeque está en el libav-toolspaquete. Puedes instalar avprobecon el siguiente comando

sudo apt-get install libav-tools

NOTA: Sería aconsejable hacer una copia de seguridad de cualquier carpeta en la que ejecute este script, así como hacer su mejor esfuerzo para leer y comprender lo que está haciendo antes ejecutarlo.

No he probado muy rigurosamente, así que YMMV.

#!/bin/bash

mkdir "mp3s"
for f in *.m4a;
do
    bitrate=$(avprobe "${f}" 2> >(grep bitrate) | sed 's/^.*bitrate://g' | sed 's/[^0-9]*//g')
    bitrate="${bitrate}K"
    new_filename=$(echo "${f}" | sed 's/.m4a$/.mp3/g')
    ffmpeg -y -i "${f}" -acodec libmp3lame -ab "${bitrate}" "mp3s/${new_filename}"
done
jbowman
fuente
0

Si trabaja a 48 KhZ y al menos 24 bits en el archivo de entrada (desde un editor de archivos i.ex.) -q:a 0reproducirá los 20 kHz en un archivo no tan grande como flac ... Pero audio de baja calidad a menos que reduzca el ruido a partir de altas frecuencias (silbidos) mediante editores de audio con difuminado o reducción de la nariz, creados en conversiones, que se reproducirán y luego utilizarán el archivo de datos como un HF inaudible, pero un ruido costoso.

Kaiser Lima
fuente