Como criar o espectrograma de muitos arquivos de áudio eficientemente com o Sox?

2

Eu tenho um monte de arquivos de áudio e gostaria de criar o espectrograma para cada arquivo individual usando o Sox. Normalmente, para um único arquivo, eu faço isso:

sox audiofile.flac -n spectrogram

No entanto, não sei como estender esse método para mais de um arquivo. Idealmente, gostaria que meu arquivo .png de saída tivesse um nome de arquivo associado ao respectivo arquivo de áudio; por exemplo, audiofile1.png para audiofile1.flac , audiofile2.png para audiofile2.flac e assim por diante.

Alguém sabe como fazer isso?

    
por Carl Rojas 03.05.2015 / 23:19

2 respostas

4

Você pode colocar o comando em um loop:

for file in *.flac
do
    outfile="${file%.*}.png"
    sox "$file" -n spectrogram "$outfile"
done

Quanto à nomenclatura de arquivos, a página do manual sox (1) parece sugerir que você possa nomear explicitamente sua saída arquivo na linha de comando para que você possa usá-lo dentro do loop.

A primeira linha no loop faz uso da substituição de parâmetro do Bash para remover .flac extension do nome do arquivo e adicione a extensão .png .

    
por 04.05.2015 / 05:21
3

Crie uma conta só para postar isso, espero que ajude alguém no futuro.

Obrigado a Joseph pela sua resposta. Talvez tenha funcionado no momento de sua postagem, mas eu tive que adicionar -o logo após spectrogram para o sox aceitar o comando.

for file in *.flac;do
    outfile="${file%.*}.png"
    sox "$file" -n spectrogram -o "$outfile"
done

Vou bater todos eles em sua própria pasta para arquivamento.

Vocêpodeatéirumpoucoalém,adicionandootítulodoarquivoacimadoespectrogramadentrodaimagem,etornando-oumpoucomaisamploparavermaisdetalhes.Aimagempadrãoéumpoucopequenaparamim.

forfilein*.flac;dooutfile="${file%.*}.png"
    title_in_pic="${file%.*}"
    sox "$file" -n spectrogram -t "$title_in_pic" -o "$outfile" -x 2000
done

Mais uma vez, obrigado a Joseph. Isso ajuda uma tonelada!

    
por 17.09.2015 / 13:41

Tags