converter wav para flac com tags

2

longa história: Eu preciso de um script para converter arquivos wav em flac, enquanto tomo o nome do arquivo (menos extensão) para colocar na tag de título da música do arquivo flac.

Tenho cerca de 1200 CDs de áudio que decidi arquivar sem perda em um disco terabyte. Como havia bastante espaço, usei o k3b para copiá-los como arquivos wav, pensando que isso economizaria muito tempo ignorando a etapa de compactação. Bem, aconteceu, mas eu já tinha copiado alguns antes de detectar o erro: quando tento importá-los para um player como o Rhythmbox, eles não têm nenhuma tag (metadados), então não podem identificar e classificar eles corretamente. Eu mudei para rasgar o resto para flac para evitar esse problema, mas eu gostaria de corrigir o erro sem voltar e remontar todos esses CDs novamente. Alguma sugestão?

    
por Bunny 06.10.2015 / 02:17

1 resposta

4

Instale o comando flac do pacote com o mesmo nome e execute

#!/bin/bash
find . -name '*.wav' |
while read file # eg stuff/artist/album/title.wav
do      file="$PWD/${file#./}" # make absolute to get more info
        album=${file%/*}    # stuff/artist/album
        artist=${album%/*}  # stuff/artist
        album=${album##*/}  # album
        artist=${artist##*/} # artist
        title=${file##*/}   # title.wav
        title=${title%.wav} # title
        flac -s --best --delete-input-file \
         --tag="TITLE=$title" \
         --tag="ALBUM=$album" \
         --tag="ARTIST=$artist" \
         "$file" # creates .flac removes .wav
done

O título é o nome da base do arquivo, menos o sufixo .wav, álbum é o diretório imediato acima, e artista o diretório acima disso. A opção --delete-input-file remove o .wav. Veja Expansão do Parâmetro no bash página man para ${var%pattern} , que remove o padrão glob (ou seja, formado com * ? e [...] ) no final da variável, ou no início ($ {var # pattern}); as versões %% e ## removem as correspondências mais longas.

    
por 06.10.2015 / 14:31