lamese adapta perfectamente a esta tarea, pero voy a usar ffmpegy ffprobepara esta respuesta, porque los conozco como el dorso de mi mano y porque pueden generalizarse a más que solo MP3. Ante todo:
sudo apt-get install ffmpeg
No conozco ninguna herramienta que pueda leer archivos multimedia y luego sobrescribir la entrada de inmediato: debe usar un archivo intermedio. Para un solo archivo, podría hacer:
ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3
mv temp.mp3 file.mp3
Puede combinarlos en una sola línea:
ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 && mv temp.mp3 file.mp3
el &&no significa que el mvcomando no se ejecutará a menos ffmpegsalidas con un estado de 0 (que significa el éxito).
Para verificar qué velocidad de bits tiene un archivo, puede usar ffprobe:
ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000'
-show_streamsle dice ffprobeque muestre información sobre transmisiones individuales; -select_streamsdice que el que cuáles seleccionar, y a:0la primera corriente de audio significa'(esto es importante para los archivos MP3 en el caso del arte de la cubierta, que se almacena como una secuencia de vídeo). El pipe ( |) toma la salida estándar de ffprobey la alimenta grep. grepsolo imprimirá aquellas líneas que coincidan con un patrón dado; en este caso, las líneas que contienen la cadena bit_rate=320000. Si ejecuta esto en un MP3 de 320k kbps, obtendrá una línea como esta:
bit_rate=32000
Si lo ejecuta en cualquier cosa con una velocidad de bits diferente, no obtendrá ningún resultado en absoluto; grep no podrá hacer una coincidencia y saldrá con un estado de 1. Esto significa que puede encadenar ese comando con el comando ffmpeg:
ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000' && ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 && mv temp.mp3 file.mp3
O, un poco más legible:
ffprobe -show_streams -select_streams a:0 -v quiet file.mp3 | grep -F 'bit_rate=320000' &&
ffmpeg -i file.mp3 -c:a libmp3lame -b:a 192k temp.mp3 &&
mv temp.mp3 file.mp3
Eso solo actuará en MP3 de 320 kbps. Pruébelo con un par de archivos de prueba.
El siguiente paso es hacer que esto funcione con múltiples archivos. Hay dos formas estándar de hacerlo: un forbucle y el findcomando. Lo siguiente actuará en cada MP3 en un directorio:
for f in *.mp3; do
ffprobe -show_streams -select_streams a:0 "$f" | grep -F 'bit_rate=320000' &&
ffmpeg -y -i "$f" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$f"
done
Esto no entrará en subdirectorios; Para hacerlo, debe configurar la globstaropción de shell:
shopt -s globstar
for f in **/*.mp3; do
ffprobe -show_streams -select_streams a:0 "$f" | grep -F 'bit_rate=320000' &&
ffmpeg -y -i "$f" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$f"
done
Con find:
find . -name '*.mp3' -exec sh -c 'ffprobe -show_streams -select_streams a:0 "$0" | grep -F "bit_rate=320000" &&
ffmpeg -y -i "$0" -c:a libmp3lame -b:a 192k /tmp/temp.mp3 && mv /tmp/temp.mp3 "$0"' '{}' \;
Todos estos se ejecutarán estrictamente secuencialmente: solo convertirán un archivo a la vez. Sin embargo, su procesador es casi seguro capaz de más que eso; para acelerar las cosas, podrías usar GNU parallel:
sudo apt-get install parallel
shopt -s globstar
parallel 'ffprobe -show_streams -select_streams a:0 {} | grep -F "bit_rate=320000" &&
ffmpeg -y -i {} -c:a libmp3lame -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}' ::: **/*.mp3
O:
find . -name '*.mp3' | parallel 'ffprobe -show_streams -select_streams a:0 {} | grep -F "bit_rate=320000" &&
ffmpeg -y -i {} -c:a libmp3lame -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}'
Unrecognized option 'select_streams' Failed to set value 'a:0' for option 'select_streams'avconv -i {} -b:a 192k {.}.temp.mp3 && mv {.}.temp.mp3 {}Lamees uno de los mejores que puedes encontrar para hacer esta tareaPuedes usar el comando
lame -b 192 input.mp3 output.mp3No soy bueno con los comandos de tuberías, pero puede usar
exiftoolpara obtener la velocidad de bits del archivo mp3pero aún necesita una forma de canalizar los comandos para encontrar archivos mp3, verificar la tasa de bits y convertir ...
fuente