Listar arquivos MP3 e durações

1

Por isso, quero mostrar uma lista de arquivos MP3 com suas durações.

ffprobe me mostra a duração de um arquivo. Mas sua saída é desagradável. Ele coloca tudo em stderr e não encontrei nenhuma maneira de remover suas informações "muito úteis" sobre como ele foi compilado. Então, se eu passar através de * .mp3, essa informação será exibida toda vez.

Eu poderia escrever um script de filtro, mas poderia haver uma solução mais simples?

    
por Mikhail Ramendik 09.09.2018 / 00:32

2 respostas

2

Para obter uma saída assim:

00:07:22 first.mp3
00:02:33 second.mp3
00:04:04 third.mp3

use:

for file in *.mp3
do
  echo -n $(ffprobe $file 2>&1 | grep 'Duration' | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1)
  echo " $file"
done 

onde

  • 2>&1 redireciona stderr para stdout
  • grep ... filtra apenas a linha com a duração
  • 1o cut ... extrai Duration: 00:07:22.33
  • cut ... extrai 00:07:22.33
  • 3o cut ... extrai 00:07:22
por 09.09.2018 / 07:52
1

Você pode facilmente se livrar das informações colocadas em stderr com a opção -loglevel -quiet . Nesse caso, você precisa consultar o campo que deseja exibir.

[user@host ~]$ ffprobe -loglevel quiet -show_entries format=duration test/test.mp3 
[FORMAT]
duration=172.434286
[/FORMAT]

Agora, isso ainda fornece algumas informações extras que podem ser removidas e a duração em segundos.

[user@host test]$ ffprobe -loglevel quiet -show_entries format=duration \-print_format default=noprint_wrappers=1:nokey=1 -pretty test.mp3 
0:02:52.434286

Aqui, o -print_format pode ser usado para se livrar da informação extra:

  • default=noprint_wrappers=1 removerá o [FORMAT] stuff
  • nokey=1 removerá o nome da chave duration=

Por último, mas não menos importante, você pode usar -pretty ou apenas -sexagesimal para converter a duração em segundos para um formato HH:MM:SS.MICROSECONDS .

Para encontrar todos os arquivos MP3 em uma pasta, você pode combinar find e o comando ffprobe acima.

[user@host ~]$ find test/ -name '*mp3' -printf "%f:\t" -exec ffprobe -loglevel error -print_format default=noprint_wrappers=1:nokey=1 -pretty -show_entries stream=duration "{}" \;
test.mp3:   0:02:52.434286
    
por 09.09.2018 / 11:45

Tags