ffmpeg - 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 的动态音频规范器 (dynaudnorm)功能实现此目的。从文档:
Normalizer无需应用“动态范围压缩”即可实现这一目标。它将在音频文件的每个部分中保留 100% 的动态范围。
实际上,音频部分之间的总分贝量会发生变化。但是,这些更改将与每个部分相关,以最大程度地减少音频中的失真。该命令应如下所示:
ffmpeg -i input.mp3 -af dynaudnorm output.mp3
在上面的片段中,我以 mp3 为例。这应该适用于所有 ffmpeg 支持的格式。
推荐阅读
- excel - VBA transponded Values 没有被 Excel 识别
- java - 在java中使用Scanner从文件中读取一些记录
- c++ - 在 C++ 类中使用带有 __declspec(dllexport) 的外部“C”时出现错误“不允许链接规范”
- r - R - 将时间戳转换为纪元
- c# - SQL 列的 SSIS 目标脚本组件动态映射
- swift - 如何使用左对齐的两个标签自定义 UINavigation 栏
- android - 我怎么知道用户是否抽到了 8 个号码
- amazon-web-services - 如何配置 AWS DMS 以将多个完整加载文件保留在同一个 s3 目标目标中?
- java - Spring Cloud Gateway 中的过滤器有推荐的顺序范围吗?
- reactjs - 无法连接 React Redux