FFprobe 在使用 -show_entries 获取音频 MAX_level 统计信息时更改 FPS

问题描述 投票:0回答:2

我正在使用 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>

我想每秒生成 1 帧来优化这个过程,

因为我在 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

问题

如何将 FPS 更改为 1 以获取每秒的 MAX_level 值?

您可以修改或使用另一个 ffprobe 命令来获得正确的结果。

提前谢谢您

android ffmpeg frame-rate frames ffprobe
2个回答
1
投票

使用 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 值设置为输入的采样率。


0
投票

获取正确的音频采样率:

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
© www.soinside.com 2019 - 2024. All rights reserved.