在 ffprobe 中解析统计信息

Parse stats in 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.* 值感兴趣。