A maneira mais eficiente de converter uma grande biblioteca do ALAC em MP3

5

Eu tenho uma grande biblioteca de CDs copiados para o alac, que eu uso como minha biblioteca musical principal. Eu gostaria de converter uma cópia desta biblioteca para vbr mp3 para dispositivos portáteis, no entanto eu não quero ter que fazer isso no meu laptop, pois há aproximadamente 650Gb de música e eu viajo muito para deixar meu laptop sentado pelo tempo que seria necessário para converter minha biblioteca inteira. Meu amigo tem algum espaço no servidor (rodando o Debian Squeeze), ele está disposto a me emprestar uma semana ou duas para poder converter minha biblioteca. Qual seria a melhor utilidade ou maneira de fazer isso? Para músicas únicas ou álbuns únicos eu uso apenas algo como

#!/bin/sh
for file in "$@" ; do
name='echo "$file" | sed -e "s/.mp4$//g"'
ffmpeg -i "$file" -ac 2 -f wav - | lame --preset standard - "$name.mp3"
done

Tenho certeza de que há uma maneira muito mais eficiente de fazer isso. Atualmente, minha música está organizada como "Artista - Álbuns - Faixas" e gostaria que a saída espeleasse isso.

    
por Leda 25.09.2011 / 17:23

2 respostas

4

Nos exemplos abaixo, ~/Music/ é assumido como o diretório de origem.

Crie um script convert.sh :

$ cat > convert
#!/bin/bash
input=$1
output=${input#.*}.mp3
ffmpeg -i "$input" -ac 2 -f wav - | lame -V 2 - "$output"
[Ctrl-D]
$ chmod +x convert
  • Se você quiser que um local diferente seja usado para as saídas, adicione isso antes de ffmpeg :

    output=~/Converted/${output#~/Music/}
    mkdir -p "${output%/*}"
    

Converter usando parallel de moreutils :

$ find ~/Music/ -type f -name '*.mp4' -print0 | xargs -0 parallel ./convert --

Não confunda com o GNU parallel , que usa uma sintaxe diferente:

$ find ~/Music/ -type f -name '*.mp4' | parallel ./convert
    
por 25.09.2011 / 18:23
2

Com o GNU Parallel, você nem precisa do script:

find ~/Music/ -type f -name '*.mp4' | parallel ffmpeg -i {} -ac 2 -f wav - \| lame -V 2 - {.}.mp3

A mesma coisa pode ser feita sem usar o lame, supondo que sua versão do ffmpeg seja compilada com o libmp3lame ativado (a maioria das versões são):

find ~/Music/ -type f -name '*.mp4' | parallel ffmpeg -i {} -c:a libmp3lame -q:a 2 {.}.mp3

Você também pode usar -iname em vez de -name no comando find, para obter correspondências insensíveis a maiúsculas e minúsculas (para que ele capte todas as * .mp4 e * .MP4 e todas as variações de maiúsculas e minúsculas). Além disso, -ac 2 não é estritamente necessário na segunda versão; O MP3 só pode suportar um máximo de dois canais, então o ffmpeg irá converter automaticamente o áudio para dois canais se necessário, o que evitará que você adicione um canal extra inútil a qualquer áudio mono que você possa ter.

Veja esta página wiki do ffmpeg para obter algumas informações básicas sobre a codificação de MP3s e este guia de hidrogeração para obter informações mais detalhadas.

Se você tem outras máquinas que você pode usar ssh (por exemplo, talvez seu laptop esteja disponível durante as noites), o GNU Parallel também pode usar essas CPUs. Veja os exemplos de --trc (para transferir os arquivos) e --retries (para lidar com o laptop estando ausente durante o dia). Consulte o link

Assista aos vídeos de introdução para saber mais: link

    
por 26.09.2011 / 02:30