Estou tentando identificar arquivos com taxa de bits alta/baixa em minha coleção de áudio usando um script de shell. Fazer file test.mp3
é muito rápido:
$time file test.mp3
test.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, Stereo
real 0m0.027s
No entanto, file
não mostra a taxa de bits dos arquivos .m4a:
$time file test.m4a
test.m4a: ISO Media, Apple iTunes ALAC/AAC-LC (.M4A) Audio
real 0m0.056s
Tentei usar exiftool
e ffprobe
, mas eles parecem ser pelo menos 10 vezes mais lentos:
$time exiftool test.m4a
Avg Bitrate : 131 kbps
real 0m0.532s
$time ffprobe test.m4a
Stream #0:0[0x1](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 130 kb/s (default)
real 0m0.621s
São apenas cerca de 100 arquivos/minuto, o que é bastante lento. Existe uma maneira mais rápida de encontrar a taxa de bits de arquivos m4a? Entendo que isso ffprobe
verifica os dados do stream em vez das tags, por isso é mais preciso que o file
. Aceito um valor de taxa de bits menos preciso, desde que seja rápido.
Minha experiência com essas tags é que elas não são aproximadas , estão erradas , especialmente para arquivos MP3 codificados em VBR mais antigos, às vezes, por um fator de 8. Em geral, as coisas não são melhores para o MP4 (que usa praticamente uma taxa de bits variável; mas o "MP4" contém uma grande família de codecs de áudio muito diferentes, com qualidades diferentes na mesma taxa !)
Isso tem a ver com duas coisas:
Com isso resolvido: o principal tempo
ffprobe
gasto normalmente é o carregamento e a configuração interna; você pode esconder isso bem usando o GNU do @OleTangeparallel
:Eu tentei, e para mim isso significou uma aceleração de cerca de 400%.
(a
jq
cadeia no final é puramente opcional, mas fornecerá um documento válido e agradável de trabalhar, mapeando nomes de arquivos para taxas de bits)