我正在使用 FFprobe 从音频中获取 MAX_level 统计信息。
此 ffprobe 命令使用 my_audio_file.mp3 作为输入文件来为每一帧生成 MAX_level。
ffprobe -f lavfi -i amovie=my_audio_file.mp3,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.MAX_level -of csv=p=0 1> my_output_log.txt
当我执行它时,我会生成 my_output_log.txt 文件,其中包含 csv 格式的该帧的帧时间和 MAX_level 值。 (1 列 - 帧时间 | 2 列 - 此帧的 MAX_level)
您可以看到 MAX_level(第二列)值每
0,026122
秒生成一次。因此,如果计算 0 秒内的所有帧,则会得到 39 帧。输入文件持续时间 = 3m 20s,然后我得到具有 +-8000 MAX_level 值的输出文件,但我只需要 200 MAX_level 值。
0.000000,0.000000
0.026122,0.000000
0.052245,0.000000
0.078367,0.000000
0.104490,0.000000
0.130612,0.000000
0.156735,0.000000
0.182857,0.000000
0.208980,0.000000
0.235102,1.000000
0.261224,5792.000000
0.287347,9111.000000
0.313469,9847.000000
0.339592,9208.000000
0.365714,8498.000000
0.391837,9649.000000
0.417959,12201.000000
0.444082,11763.000000
0.470204,9013.000000
0.496327,9048.000000
0.522449,8826.000000
0.548571,9932.000000
0.574694,9382.000000
0.600816,9013.000000
0.626939,8052.000000
0.653061,8317.000000
0.679184,5445.000000
0.705306,6925.000000
0.731429,7136.000000
0.757551,7029.000000
0.783673,7610.000000
0.809796,9199.000000
0.835918,8443.000000
0.862041,7847.000000
0.888163,6878.000000
0.914286,7385.000000
0.940408,9294.000000
0.966531,8105.000000
0.992653,8620.000000
1.018776,7286.000000
<38 frames>
2.011429,4573.000000
2.037551,5155.000000
2.063673,4527.000000
<etc>
因为我在 Android 设备上执行此命令,生成它需要 17 秒。
输出应该是这样的:
0.000000,0.000000
1.018776,7286.000000
2.011429,4573.000000
3.004082,9935.000000
4.022857,6132.000000
<frame per second>
200.012457,1002.000000
您可以修改或使用另一个 ffprobe 命令来获得正确的结果。
使用 asetnsamples 将 1 秒的媒体内容合并到 1 帧中。
ffprobe -f lavfi -i amovie=my_audio_file.mp3,asetnsamples=44100,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.MAX_level -of csv=p=0 1> my_output_log.txt
将 asetnsamples 值设置为输入的采样率。
获取正确的音频采样率:
ffprobe -i audio.mp3 -v error -show_entries stream=sample_rate -of default=noprint_wrappers=1:nokey=1
获取每秒的最大级别帧(将
<>
中的 asetnsamples
替换为上一个 cmd 结果):
ffprobe -v error -f lavfi -i amovie=audio.mp3,asetnsamples=<samples_from_prev_command_here>,astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.MAX_level -of default=noprint_wrappers=1:nokey=1