解析 ffprobe 中的统计信息



我正在使用ffprobe收集音频文件的一些元数据信息。但是,由于我不熟悉此工具,我获得了不必要的额外信息。这是我正在运行的命令:

ffprobe -f lavfi -i amovie=<audio_file>,astats=metadata=1:reset=4400 -hide_banner

这是我得到的简短示例输出:

Input #0, lavfi, from 'amovie=<audio_file>,astats=metadata=1:reset=4400':
Duration: N/A, start: 0.000000, bitrate: 3072 kb/s
Stream #0:0: Audio: pcm_f32le, 48000 Hz, stereo, flt, 3072 kb/s
[Parsed_astats_1 @ 0x7fcfd4d01140] Channel: 1
[Parsed_astats_1 @ 0x7fcfd4d01140] DC offset: -0.032707
[Parsed_astats_1 @ 0x7fcfd4d01140] Min level: -0.041852
...

是否有标志组合可以产生漂亮的JSONCSV输出,像这样隐藏Input #0 ... and [Parsed_astats_1 @ 0x7fcfd4d01140]

{
"Channel": 1,
"DC offset": -0.032707,
"Min level": -0.041852
...
}

我能想到的最好的解决方案是使用ametadata过滤器并将统计数据写入文件。

$ ffmpeg -f lavfi -i sine -t 1s -af 'astats=metadata=1:reset=4400:metadata=true,ametadata=mode=print:file=stats' -f null -
$ cat stats
...
lavfi.astats.1.Bit_depth=16.000000
lavfi.astats.1.Bit_depth2=16.000000
lavfi.astats.1.Dynamic_range=78.265678
lavfi.astats.1.Zero_crossings=920.000000
lavfi.astats.1.Zero_crossings_rate=0.019965
lavfi.astats.Overall.DC_offset=0.000043
lavfi.astats.Overall.Min_level=-4095.000000
lavfi.astats.Overall.Max_level=4095.000000
lavfi.astats.Overall.Min_difference=0.000000
lavfi.astats.Overall.Max_difference=257.000000
lavfi.astats.Overall.Mean_difference=163.407865
lavfi.astats.Overall.RMS_difference=181.500114
lavfi.astats.Overall.Peak_level=-18.063656
lavfi.astats.Overall.RMS_level=-21.073770
lavfi.astats.Overall.RMS_peak=-21.058020
lavfi.astats.Overall.RMS_trough=-21.118775
lavfi.astats.Overall.Flat_factor=0.000000
lavfi.astats.Overall.Peak_count=502.000000
lavfi.astats.Overall.Bit_depth=16.000000
lavfi.astats.Overall.Bit_depth2=16.000000
lavfi.astats.Overall.Number_of_samples=46080.000000

我猜你对最后的帧lavfi.astats.Overall.*值感兴趣。

最新更新