我正在使用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
...
是否有标志组合可以产生漂亮的JSON
或CSV
输出,像这样隐藏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.*
值感兴趣。