Script shell para ler metadados do arquivo de áudio

1

Eu quero escrever um script simples que faça o seguinte:

  • Lê metadados de um arquivo de áudio (WAV, FLAC, MP3 e AIFF)
  • Retorna uma mensagem de erro se a taxa de bits estiver abaixo de um limite
  • Renomeia o arquivo para estar em um formato específico, por exemplo, artist-title-year-etc
  • Move para outra pasta

Eu tenho uma experiência de script de shell muito limitada, mas eu queria saber se alguém poderia me apontar na direção certa, particularmente para ler os metadados. Se alguém puder propor uma maneira alternativa de escrever um script de shell que também seria útil!

    
por Sebastian 13.02.2018 / 20:53

2 respostas

2

Eu gosto da sua atitude porque você não está pedindo a ninguém para fazer sua lição de casa e dar uma resposta.

Você desejará usar um programa como exiftool , que lê e exibe os metadados de um arquivo. No caso de exiftool , você pode selecionar quais tags de metadados serão exibidas, por exemplo, exiftool -maxbitrate filename . Primeiro, execute o programa em um arquivo de amostra, sem opções, para procurar as tags disponíveis e, em seguida, selecione o que lhe interessa. Observe que, embora as tags possam ser exibidas em maiúsculas e com espaços incorporados, você as usa programaticamente sem espaços e não diferencia maiúsculas de minúsculas, por exemplo. a tag de metadados "Max BitRate" seria especificada como opção de linha de comando -maxbitrate .

Se você escolher exiftool , poderá salvar várias etapas se aproveitar sua opção -printFormat para personalizar a saída para ajudá-lo a obter os elementos de metadados desejados, no formato desejado, para renomear o arquivo . Um exemplo de uso desse recurso é exiftool -Bitdepth -MaxBitRate -p 'blah $Bitdepth blah $Maxbitrate' your_file.mp3 . Leia a página man para mais detalhes.

Para outros programas de metadados, você pode precisar analisar seus resultados usando um segundo programa como awk para obter apenas o campo de dados de interesse, no seu caso a taxa de bits, e usar a aritmética do seu shell testes de comparação, como -lt ou -gt para sinalizar um erro.

Quanto ao restante dos requisitos do script, a operação de renomear e mover provavelmente pode ser feita em uma única etapa. O desafio será obter as informações que você está procurando. Novamente, o programa de metadados escolhido (por exemplo, exiftool ) fornecerá essa informação para você.

    
por 13.02.2018 / 21:30
0
Solução

bash com a ferramenta Mediainfo (uma solução unificada e conveniente) exibição dos dados técnicos e de tags mais relevantes para arquivos de vídeo e áudio):

#!/bin/bash

dest="/path/to/dir"    # path to destination directory
trsh=256               # threshold 
IFS='|'                # input field separator

while read -r author title year bitrate; do
    if [[ "$((bitrate/1000))" -lt $trsh ]]; then
        echo "Bitrate is below $trsh Kbps"
        exit 1
    fi
    mv "$1" "${dest}/${author}-${title}-${year}.${1##*.}"

done < <(mediainfo --Inform="General;%Performer%|%Track%|%Recorded_Date%|%BitRate%" "$1")
    
por 13.02.2018 / 22:15

Tags