Tenho vários MP3s estéreo que gostaria de converter para mono. Qual é a melhor maneira de fazer isso? Eu preferiria algo que permitisse processá-los em lote. Quero manter a qualidade o mais próxima possível do original. Meus arquivos também têm taxas de bits diferentes, então não quero deixar todos os arquivos com 320 kpbs quando alguns têm apenas 128.
Além disso, existe alguma maneira rápida de ver quais arquivos são estéreo em toda a minha biblioteca?
Responder1
Converter de estéreo para mono significará recodificar, portanto, manter a mesma taxa de bits não faria sentido. Na verdade, converter um MP3 de 128 kbit/s -> um novo MP3 de 128 kbit/s proporcionará uma qualidade terrivelmente terrível, mesmo que o segundo seja mono (e, portanto, exija uma taxa de bits mais baixa para a mesma qualidade subjetiva).
Geralmente, eu usaria uma configuração de taxa de bits variável (VBR) para MP3, que visa uma qualidade específica e permite que o codificador defina qualquer taxa de bits necessária (o áudio completamente silencioso precisa de uma taxa de bits mais baixa do que o canto da baleia, que precisa de uma taxa de bits mais baixa do que dubstep). Na linha de comando, o ffmpeg pode converter áudio em mono com a opção -ac 1
, assim:
ffmpeg -i input.mp3 -c:a libmp3lame -q:a 2 -ac 1 output.mp3
Veresta páginapara obter um guia sobre como usar -q:a
. Observe que a tabela nessa página é voltada para áudio estéreo; as taxas de bits reais que você verá serão um pouco mais baixas. Normalmente, eu recomendo 3-4, mas como você está codificando MP3s em vez de um CD original, você deve tentar um pouco mais alto.
É claro que isso pode ser automatizado com muita facilidade. No Linux/OSX/outro tipo UNIX, para converter um diretório de MP3s:
for f in *.mp3; do ffmpeg -i "$f" -c:a libmp3lame -q:a 2 -ac 1 mono-"$f"; done
Para fazer isso recursivamente:
find . -type f -name "*.mp3" -exec ffmpeg -i '{}' -c:a libmp3lame -q:a 2 -ac 1 mono-'{}' \;
Se você possui GNU Parallel e uma máquina multi-core, pode achar isto útil:
find . -type f -name "*.mp3" | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 -ac 1 mono-{}
Responder2
Bem, existem várias maneiras, mas deixe-me guiá-lo para aquelas que realmente funcionam. Você pode usarAudácia, um software gratuito disponível para isso.
Por favor veja issoArtigo de eHowsobre como converter o MP3 para mono.
Responder3
Lame pode converter arquivos em mono usando a opção -m, sendo a vantagem a preservação de meta tags (não tenho certeza se o ffmpeg também pode fazer isso).
Aqui está um exemplo um tanto complicado que determina a taxa de bits de um mp3 antes de transcodificá-lo com uma das opções de qualidade de taxa de bits variável.
gato s2mono.sh #!/bin/bash arquivo mp3=$@ tamanho mp3() { du -sk "$1" | awk '{imprimir $1 * 8}' } comprimento do mp3 () { id3info "$1" | \ awk '/=== TLEN/ { if ($NF > 0) { len=int( $NF/1000) }} END {imprimir len}' } taxa de mp3 () { echo $(( `mp3size "$1"` / `mp3length "$1"` )) } taxa de bits=`taxa de mp3 "$arquivomp3"` se [$ taxa de bits -gt 155]; então VBR='-V4'; fi se [$ taxa de bits -gt 190]; então VBR='-V2'; fi se [$ taxa de bits -gt 249]; então VBR='-V0'; fi echo redução da resolução $mp3file coxo --silent $VBR -mm --mp3input "$mp3file" \ "$(nomebase"$mp3file" .mp3 )-mono.mp3"
Executei isso em uma pasta onde o tamanho total de todos os mp3s era de 80 MB em formato estéreo. Os mp3s mono resultantes consumiram apenas 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
Quanto à última parte da sua pergunta, file
servirá:
find /R/audio/muzica/_ripped/wav -exec file {} \+ |grep Monaural
Responder4
Este é o método mais fácil que encontrei
para eu entrar.mp3; faça ffmpeg -i "$i" -ac 1 "${i%.} - mono.mp3"; concluído
O mesmo método também pode ser usado para converter de outros formatos de áudio para mp3, bem como para converter para mono.
para eu entrar.m4b; faça ffmpeg -i "$i" -ac 1 "${i%.} - mono.mp3"; concluído