如何检测ffprobe返回的音频电平统计值的数值刻度?
ffprobe音频电平检测刻度的疑问
我使用ffprobe检测各类音频文件的最大与最小电平,所用命令示例如下:
ffprobe -v error -f lavfi -i amovie=my_song.mp3,asetnsamples=n=4410,astats=metadata=1:reset=1 -show_entries frame_tags=lavfi.astats.Overall.Max_level,lavfi.astats.Overall.Min_level -of json
通常返回的最大/最小电平值刻度会与输入文件格式匹配:
- MP3文件返回
-1.0至1.0的分数值,代表最大电平的百分比 - 16位有符号WAV文件返回
-32768至32767的数值 - 32位有符号FLAC文件使用
-2147483648至2147483647的范围,数值位宽与音频文件的位深一致
但在部分场景下,返回刻度与输入文件不匹配,比如8位有符号WAV文件,返回结果采用的是16位刻度(-32768至32767)。
我希望找到非启发式的方法,来检测ffprobe返回结果所用的格式或刻度。目前未找到专门反映生成这些电平值所用数值体系的返回字段,sample_fmt在多数场景下匹配,但像s8格式的WAV文件,sample_fmt返回s8,与实际返回电平值的s16刻度不匹配。
如果无法从ffprobe实时获取该信息,FFmpeg代码库中是否有相关内容说明它如何确定电平值的刻度?
内容的提问来源于stack exchange,提问作者Farski
相关产品推荐
相关产品推荐

