我正在尝试使用 shell 脚本识别音频收藏中具有高/低比特率的文件。做起来file test.mp3
非常快:
$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
但是,file
不显示 .m4a 文件的比特率:
$time file test.m4a
test.m4a: ISO Media, Apple iTunes ALAC/AAC-LC (.M4A) Audio
real 0m0.056s
我尝试使用exiftool
and ffprobe
,但它们似乎至少慢了 10 倍:
$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
这大约只有 100 个文件/分钟,相当慢。有没有更快的方法来查找 m4a 文件的比特率?据我了解,ffprobe
检查流数据而不是标签,因此它比file
. 只要速度快,我就可以接受不太精确的比特率值。
我对这些标签的经验是,它们不是近似的,它们是错误的,特别是对于较旧的 VBR 编码的 MP3 文件,例如有时会偏离 8 倍。一般来说,MP4 的情况并没有更好(它几乎使用可变比特率;但是“MP4”包含一大系列非常不同的音频编解码器,在相同的速率下具有不同的质量!)
这与两件事有关:
排除这一点:主要时间
ffprobe
通常花在加载和内部设置上;你可以使用 @OleTange 的 GNU 很好地隐藏它parallel
:我尝试过,对我来说这意味着大约 400% 的加速。
(
jq
最后的链完全是可选的,但会给您一个有效的、易于使用的文档,将文件名映射到比特率)