首页 > 解决方案 > ffmpeg如何缩短音量范围

问题描述

我使用下面的这个命令来获取卷信息

ffmpeg -i {fileName} -af  "volumedetect" -f null -

并得到以下结果:

[Parsed_volumedetect_0 @ 000001b4f9675ec0] mean_volume: -25.1 dB
[Parsed_volumedetect_0 @ 000001b4f9675ec0] max_volume: -4.0 dB
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_4db: 12
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_5db: 72
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_6db: 293
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_7db: 808
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_8db: 2276
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_9db: 5885
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_10db: 13146
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_11db: 26627

我想像下面这样将音量范围缩短到一半

[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_6db: ...
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_7db: ...
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_8db: ...
[Parsed_volumedetect_0 @ 000001b4f9675ec0] histogram_9db: ...

如何通过 ffmpeg 命令来实现?

更新1:

filename.mp3 音量检测如下:

[Parsed_volumedetect_0 @ 00000192cd9adcc0] max_volume: -0.3 dB
[Parsed_volumedetect_0 @ 00000192cd9adcc0] histogram_0db: 32
[Parsed_volumedetect_0 @ 00000192cd9adcc0] histogram_1db: 333
[Parsed_volumedetect_0 @ 00000192cd9adcc0] histogram_2db: 1216
[Parsed_volumedetect_0 @ 00000192cd9adcc0] histogram_3db: 3490
[Parsed_volumedetect_0 @ 00000192cd9adcc0] histogram_4db: 8829
[Parsed_volumedetect_0 @ 00000192cd9adcc0] histogram_5db: 19873

执行命令后

ffmpeg -i filename.mp3 -af filename_output.mp3

filename_output.mp3 音量检测如下:

[Parsed_volumedetect_0 @ 0000017af506dd00] max_volume: -0.4 dB
[Parsed_volumedetect_0 @ 0000017af506dd00] histogram_0db: 13
[Parsed_volumedetect_0 @ 0000017af506dd00] histogram_1db: 226
[Parsed_volumedetect_0 @ 0000017af506dd00] histogram_2db: 906
[Parsed_volumedetect_0 @ 0000017af506dd00] histogram_3db: 2688
[Parsed_volumedetect_0 @ 0000017af506dd00] histogram_4db: 7202
[Parsed_volumedetect_0 @ 0000017af506dd00] histogram_5db: 16473

没有大的变化,如果我想缩短更多的音量范围,怎么办?

标签: ffmpeg

解决方案


您可以使用FFMPEG 的动态音频规范器 (dynaudnorm)功能实现此目的。从文档:

Normalizer无需应用“动态范围压缩”即可实现这一目标。它将在音频文件的每个部分中保留 100% 的动态范围。

实际上,音频部分之间的总分贝量会发生变化。但是,这些更改将与每个部分相关,以最大程度地减少音频中的失真。该命令应如下所示:

ffmpeg -i input.mp3 -af dynaudnorm output.mp3

在上面的片段中,我以 mp3 为例。这应该适用于所有 ffmpeg 支持的格式。


推荐阅读