Há muito tempo que uso uma técnica desajeitada que envolve o Audacity com um plugin LAME. Tudo bem, eu acho, mas o apelo da abordagem do Terminal é que posso ser um pouco mais refinado com os meus [options]
e talvez usar binários mais atualizados.
Além disso, meu MacBook está envelhecendo um pouco agora e, se eu puder me livrar de uma GUI desnecessária, tanto melhor.
Desde já, obrigado.
Respostas:
Convertendo um único arquivo sem preservar tags
--decode --stdout
=-dc
lame - $outfile
= entrada de STDIN--preset extreme
= ~ 245 kbit / s VBRUm script de shell que preserva algumas tags ID3
Para usar o script, salve-o em algum lugar
~/bin/flac2mp3
e torne-o executávelchmod +x ~/bin/flac2mp3
.Isso converteria todos os arquivos flac na sua pasta Music:
Ou um pouco mais rápido, pois chama flac2mp3 apenas uma vez:
fonte
${file%.flac}.mp3
é incrível! Anteriormente, eu estava usando${x:: ${#x}-3}m4a
para alterar o nome do arquivo da música de .wav para .m4a. Incrível ver uma maneira que parece um pouco mais fácil.!/bin/sh file="$1" outfile=${file%.flac}.mp3 eval $(metaflac --export-tags-to - "$file" | sed "s/=\(.*\)/='\1'/") flac -cd "$file" | lame --preset standard \ --add-id3v2 --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \ --ty "$DATE" --tn "$TRACKNUMBER" --tg "$GENRE" \ - "$outfile"
O ffmpeg preservaria as tags (mas não a arte da capa) por padrão.
-aq 1
corresponde-V 1
em coxo.-acodec libfaac
converteria os arquivos para AAC:fonte
Peguei o que vocês tinham, mas depois o fiz funcionar ainda mais rápido usando
xargs
para paralelizar os trabalhos.Então este é o script acima / usr / local / bin / flac2mp3
e aqui estão algumas estatísticas para a aceleração do desempenho usando paralelismo.
você pode ver que ele também utilizou minhas CPUs com mais eficiência, eu tenho um intel i7, então 8 é provavelmente o número certo de processos.
fonte
Encontrei este tópico ao tentar codificar diretamente MP3s a partir de arquivos de origem FLAC. A resposta de Boehj fornece uma opção de script decente, mas eu pessoalmente prefiro usar o FFmpeg, então esse é o script do Bash que criei para lidar com essa tarefa. Testado e funciona muito bem no macOS Sierra (10.12.2).
Requisitos: Você já deve ter
ffmpeg
elame
já instalado no seu Mac. A maneira mais fácil de fazer isso é através do Homebrew. Primeiro, verifique se o Homebrew está instalado assim:Em seguida, execute este comando para instalar
ffmpeg
elame
:Feito isso, você estará pronto para executar este script. Esse script procurará arquivos FLAC no diretório,
path/to/FLAC/files
mas isso pode ser alterado simplesmente.
se os arquivos FLAC estiverem no mesmo diretório em que você está executando esse script. Quando executado, ele cria ummp3/
subdiretório no qual todos os arquivos MP3 serão colocou.Algumas anotações sobre as coisas que aprendi “The Hard Way ™” para que outros possam ganhar com o que fiz de maneira diferente neste script em comparação com outras pessoas na Internet.
grep
comandos para análise de tags (usando o FFprobe, instalado com o FFmpeg) não diferenciam maiúsculas de minúsculas, usando a-i
opção para fazê-logrep -i
.cut
comando a seguir agora está limitado a dividir a saída apenas com base no primeiro=
em um nome de tag com a-f 2-
opção que faz o comandocut -d '=' -f 2-
. Por exemplo, o Pavement tem uma música intitulada “5-4 = Unity” e se apenas o segundo pedaço fosse selecionado por meio de corte, esse título seria truncado para “5-4”.sed
que se livrar de zeros à esquerda:sed 's/^0*//'
.-f wav
e isso realmente comprimiria a saída FFmpeg, o que não faz sentido em uma configuração de canal em que o LAME a recodificará. Em vez disso, a saída aqui é definida como-f s16le -acodec pcm_s16le
basicamente saída RAW; perfeito para canalizar áudio para outro processo como este.-r
opção.--tt
,--ta
,--tl
,--tn
e--tg
opções de tag ID3v2 para LAME. Quando o áudio é transmitido / transmitido de um processo para LAME, os metadados do arquivo de origem são perdidos. Uma opção sugerida é obter FFmpeg para salvar os metadados para um arquivo de texto, definindo a opção com-f ffmetadata "[metadata filename here]"
e, em seguida, executar o FFmpeg novamente com a algo como isto:-i "[metadata filename here]" -map_metadata 1 -c:a copy [destination mp3 file] id3v2_version 3 -write_id3v1 1
. Isso funciona, mas observe o requisito para um arquivo de destino. Parece que o FFmpeg importa apenas metadados quando pode copiar o arquivo, o que parece ser um processo muito inútil. Usando FFprobe para obter valores e, em seguida, colocá-los em LAME com--tt
,--ta
,--tl
,--tn
e--tg
opções funciona melhor; todos os metadados são gravados no local, portanto é necessário gerar um arquivo duplicado.fonte