Mass .flac - transcodificação .mp3: Como escrever um script de shell que preserva as informações da tag ID3?

9

Nas últimas semanas, passei de uma abordagem bastante prática para o .flac - > transcodificação de .mp3, para uma que é muito mais 'set & esqueça '.

O primeiro passo foi parar de usar um front-end de GUI (o Audacity com um plug-in LAME) e, em vez disso, usar o método que descrevi aqui .

O segundo passo foi encontrar um script de shell bash que diria que o loop de comando funcionasse recursivamente, permitindo que diretórios com muitos subdiretórios contendo arquivos .flac fossem transcodificados em uma simples etapa. Essa resposta answer foi fornecida por um usuário em askubuntu. com.

Agora, desejo aprender como refinar ainda mais as coisas para que as informações da tag ID3 sejam preservadas. Os métodos vinculados aos dados de tag ID3 da faixa acima, deixando o mínimo (ou seja, apenas o campo de título permanece).

Alguém pode me ensinar como escrever um script de shell?

O script de shell foi atualizado assim:

#!/bin/bash
file="$1"
flac -cd "$file" | lame --preset fast extreme - "${file%.flac}.mp3"
id3cp "$file" "${file%.flac}.mp3"

Fazer find . -name '*.flac' -exec ~/bin/flac2mp3 '{}' \; em ~ / Desktop / stack fornece a seguinte saída:

01 - Amon Tobin - Chomp Samba.flac: done         
LAME 3.98.4 64bits (http://www.mp3dev.org/)
Using polyphase lowpass filter, transition band: 19383 Hz - 19916 Hz
Encoding <stdin> to ./01 - Amon Tobin - Chomp Samba.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III VBR(q=0)
Parsing ./01 - Amon Tobin - Chomp Samba.flac: done.  Copying to ./01 - Amon Tobin - Chomp Samba.mp3: done

id3info para o .flac original e resultante .mp3 dá, respectivamente:

*** Tag information for 01 - Amon Tobin - Chomp Samba.flac

(ou seja, nada);

*** Tag information for 01 - Amon Tobin - Chomp Samba.mp3
*** mp3 info
MPEG1/layer III
Bitrate: 128KBps
Frequency: 44KHz

O .flac definitivamente tem informações de tags. Eu posso verificar isso abrindo o EasyTAG. EasyTAG refere-se a isto como 'FLAC Vorbis Tag' mas 'ID3 Tag' para o .mp3. Este é o problema?

    
por boehj 27.03.2011 / 13:39

3 respostas

7
#!/bin/sh

file="$1"
outfile=${file%.flac}.mp3

eval $(metaflac --export-tags-to - "$file" | sed "s/=\(.*\)/=''/")

flac -cd "$file" | lame --preset fast extreme \
        --add-id3v2 --tt "$TITLE" --ta "$ARTIST" --tl "$ALBUM" \
        --ty "$DATE" --tn "$TRACKNUMBER" --tg "$GENRE" \
        - "$outfile"
    
por 27.03.2011 / 22:33
1

Como usar o mp3fs para codificar em massa o flac to mp3

Em vez de usar um programa para converter arquivos flac para mp3, você pode usar mp3fs para apresentá-los como mp3s virtuais e um programa que pode enfileirar trabalhos de cópia. Funciona maravilhosamente bem para mim.

Faça o download e instale o mp3fs e o ultracopier:

sudo apt-get install mp3fs ultracopier

Crie um par de diretórios flac e mp3 para cada mp3fs que você deseja executar. Eu tenho uma CPU dual core, então eu corro dois. Se você mantiver os diretórios flac na partição onde seus arquivos flac estão, você poderá movê-los rapidamente. Essa partição é chamada "Armazenamento" no meu sistema.

cd /media/Storage
mkdir mp3fs mp3fs/flac_1 mp3fs/mp3_1 mp3fs/flac_2 mp3fs/mp3_2

Você pode montar os diretórios a partir da linha de comando ou adicionando-os a /etc/fstab . Você também pode configurar o algoritmo de taxa de bits e codificação dos mp3 virtuais no momento da montagem. Eu quero mp3 com uma taxa de bits constante de 320kbps, e o lame pode levar todo o tempo necessário para produzir o melhor mp3 possível.

Na linha de comando:

mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 -o allow_other,ro
mp3fs -b 320 -oquality=0 /media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 -o allow_other,ro

Se o fusível reclamar, como

fusermount: failed to open /etc/fuse.conf: Permission denied
fusermount: option allow_other only allowed if 'user_allow_other' is set in etc/fuse.conf

descomente a opção user_allow_other em /etc/fuse.conf e / ou torne-a legível com

sudo chmod 644 /etc/fuse.conf

Ou de /etc/fstab :

mp3fs#/media/Storage/mp3fs/flac_1 /media/Storage/mp3fs/mp3_1 fuse user,ro,allow_other,bitrate=320,quality=0 0 0
mp3fs#/media/Storage/mp3fs/flac_2 /media/Storage/mp3fs/mp3_2 fuse user,ro,allow_other,bitrate=320,quality=0 0 0

Depois de adicionar os diretórios a /etc/fstab , você pode montá-los usando

sudo mount -a

Feito! Comece ultracopier. Ele colocará um ícone de indicador no seu painel do gnome ou o que quer que você esteja usando. Clique nele, selecione adicionar cópia. Eu fiz isso duas vezes para usar dois núcleos. Use o seu navegador de arquivos para mover alguns flacs para flac_1. Navegue até o diretório mp3_1 e arraste seus mp3's para uma das janelas ultracopier para iniciar uma fila de cópias. O Ultracopier pedirá o destino dos arquivos. Agora você tem um núcleo ocupado codificando um lote de flacs para mp3.

Para usar o outro núcleo, mova os arquivos flac para o flac_2 e arraste os mp3's do mp3_2 para a segunda janela do ultracopier.

Update: Em vez de ultracopier eu estou usando agora MiniCopier, é um pouco mais fácil de usar. Veja os comentários abaixo.

    
por 17.11.2011 / 15:50
0

id3cp não funciona porque o FLAC não usa ID3; usa tags Vorbis.

avconv tem uma opção para manter as tags por meio da conversão. É um pouco instável, seu valor depende da combinação de codecs , mas funciona assim no seu caso (versão 9.16-6):

avconv -i in.flac -map_metadata 0:g:0 out.mp3

Aplicar todos esses arquivos FLAC em uma pasta (recursivamente) é tão fácil quanto isto: (usando bash )

for f in */**/*.flac; do
  avconv -i "${f}" -map_metadata 0:g:0 "'echo "${f}" | sed -e s/flac$/mp3/'";
done

Observe que avconv usa o lame automaticamente; existem outras opções para controlar a qualidade e outras coisas. Verifique man avconv para detalhes.

    
por 01.01.2015 / 19:11