¿Convertir un montón de MP3 a mono?

¿Convertir un montón de MP3 a mono?

Tengo un montón de MP3 estéreo que me gustaría convertir a mono. ¿Cuál es la mejor manera de hacer esto? Preferiría algo que permitiera procesarlos por lotes. Quiero mantener la calidad lo más cercana posible al original. Mis archivos también tienen diferentes velocidades de bits, por lo que no quiero que todos los archivos sean de 320 kpbs cuando algunos solo tienen 128.

Además, ¿hay alguna forma rápida de ver qué archivos son estéreo de toda mi biblioteca?

Respuesta1

La conversión de estéreo a mono implicará volver a codificar, por lo que mantener la misma velocidad de bits no tendría sentido. De hecho, convertir un MP3 de 128 kbit/s -> un nuevo MP3 de 128 kbit/s obtendrá una calidad terriblemente terrible, incluso si el segundo es mono (y por lo tanto requiere una velocidad de bits más baja para la misma calidad subjetiva).

Generalmente, usaría una configuración de velocidad de bits variable (VBR) para MP3, que apunta a una calidad específica y permite que el codificador establezca cualquier velocidad de bits necesaria (el audio completamente silencioso necesita una velocidad de bits más baja que el canto de ballena, que necesita una velocidad de bits más baja que dubstep). Desde la línea de comandos, ffmpeg puede convertir audio a mono con la opción -ac 1, así:

ffmpeg -i input.mp3 -c:a libmp3lame -q:a 2 -ac 1 output.mp3

Veresta páginapara obtener una guía de uso -q:a. Tenga en cuenta que la tabla de esa página está dirigida al audio estéreo; las tasas de bits reales que verá serán algo más bajas. Normalmente, recomiendo 3-4, pero como estás codificando desde MP3 en lugar de un CD original, deberías apuntar un poco más alto.

Por supuesto, esto se puede automatizar muy fácilmente. En Linux/OSX/otro tipo UNIX, para convertir un directorio de MP3:

for f in *.mp3; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 -ac 1 mono-"$f"; done

Para hacerlo de forma recursiva:

find . -type f -name "*.mp3" -exec ffmpeg -i '{}' -c:a libmp3lame -q:a 2 -ac 1 mono-'{}' \;

Si tiene GNU Parallel y una máquina multinúcleo, esto puede resultarle útil:

find . -type f -name "*.mp3" | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 -ac 1 mono-{}

Respuesta2

Bueno, hay varias maneras, pero déjame guiarte hacia las que realmente funcionan. Puedes usarAudacia, un software gratuito disponible para eso.

Por favor vea estoartículo de eHowsobre cómo convertir el MP3 a mono.

Respuesta3

Lame puede convertir archivos a mono usando el modificador -m, siendo la ventaja la preservación de las metaetiquetas (no estoy seguro de si ffmpeg también puede hacer eso).

Aquí hay un ejemplo algo complicado que determina la tasa de bits de un mp3 antes de transcodificarlo con una de las opciones de calidad de tasa de bits variable.

gato s2mono.sh
#!/bin/bash

archivo mp3=$@

tamaño mp3 () {
    du-sk "$1" | awk '{imprimir $1 * 8 }'
}
longitud mp3 () {
    id3info "$1" | \
        awk '/=== TLEN/ { if ($NF > 0) { len=int( $NF/1000) }} FIN {imprimir len}'
}
mp3rate () {
    echo $(( `mp3size "$1"` / `mp3length "$1"` ))
}

tasa de bits = `tasa de mp3 "$ archivo mp3"`
si [ $bitrate -gt 155 ]; entonces VBR='-V4'; fi
si [ $bitrate -gt 190 ]; entonces VBR='-V2'; fi
si [ $bitrate -gt 249 ]; entonces VBR='-V0'; fi

reducción de resolución de eco $mp3file
cojo --silent $VBR -mm --mp3input "$mp3file" \
      "$(nombre base "$mp3file" .mp3 )-mono.mp3"

Ejecuté esto en una carpeta donde el tamaño total de todos los mp3 era de 80 MB en formato estéreo. Los mp3 mono resultantes consumieron sólo 32 MB.

 find . -iname \*mp3  -print0 |xargs -0 -L1 sh s2mono.sh
 (...)

 du -skc *-mono.mp3| tail -n1
 32376   total

 find . -iname \*mp3  |grep -ve '-mono'  |\
     while read f; do du -sk "$f" ;done  |\
     awk '{ tot+=$1} END{print tot}'
 80112

En cuanto a la última parte de su pregunta, fileservirá:

 find /R/audio/muzica/_ripped/wav  -exec file {} \+   |grep Monaural

Respuesta4

Este es el método más fácil que encontré.

para yo en.mp3; hacer ffmpeg -i "$i" -ac 1 "${i%.} - mono.mp3"; hecho

El mismo método se puede utilizar para convertir otros formatos de audio a mp3, así como para convertir a mono.

para yo en.m4b; hacer ffmpeg -i "$i" -ac 1 "${i%.} - mono.mp3"; hecho

información relacionada