基于ffmpeg开发的多音频文件音量均衡程序

news2025/7/22 6:56:50

前言

audio_balance

✨ 基于ffmpeg开发的多音频文件音量均衡程序 ✨

license python

项目地址

GitHub:https://github.com/Ikaros-521/audio_balance
gitee:https://gitee.com/ikaros-521/audio_balance

使用说明

Python:3.9+
程序依赖 ffmpeg实现。请先安装ffmpeg并配置到环境变量后使用。(官方仓库:https://github.com/FFmpeg/FFmpeg)
如果你本地装了格式工厂,可以直接把格式工厂安装路径配置到环境变量path中(格式工厂自带ffmpeg)
注意:使用时请清空 out文件夹(即输出音频的文件夹)

使用参考

1、获取期待音量分贝

使用 get_mean_volume.py 获取音频文件平均音量。此处建议传入你认为合适音量的音频文件获取信息,以做为基准。

# 打开cmd,在工程路径下运行以下命令,其中 data/origin.mp3 为需要解析的音频文件
python get_mean_volume.py data/origin.mp3

命令执行返回关键内容截取

[Parsed_volumedetect_0 @ 000001d73eb72840] n_samples: 5329246
[Parsed_volumedetect_0 @ 000001d73eb72840] mean_volume: -20.7 dB
[Parsed_volumedetect_0 @ 000001d73eb72840] max_volume: -2.0 dB
[Parsed_volumedetect_0 @ 000001d73eb72840] histogram_2db: 57
[Parsed_volumedetect_0 @ 000001d73eb72840] histogram_3db: 390
[Parsed_volumedetect_0 @ 000001d73eb72840] histogram_4db: 1226
[Parsed_volumedetect_0 @ 000001d73eb72840] histogram_5db: 3330
[Parsed_volumedetect_0 @ 000001d73eb72840] histogram_6db: 6770
id3v2_parse

data/origin.mp3 平均音量:-20.7dB

2、执行多音频均衡

在步骤1中我们看到 data\origin.mp3的mean_volume(平均音量)为 -20.7dB,我们期望音量为 -10dB。

# 打开cmd,在工程路径下运行以下命令
# 请依次传入 目标平均音量(默认-10dB,做为基准,实际不会调至此) 待处理音频路径(默认data\) 输出音频路径(默认out\)
python audio_balance.py -10 data\ out\

运行完毕后输出内容

待处理音频路径:data\
输出音频路径:out\
目标平均音量:-10.0dB
待处理音频文件总数:4
out\data\1 创建成功
data\1\origin.mp3 平均音量:-20.7dB
ffmpeg -i data\1\origin.mp3 -filter:a "volume=10.7dB" out\data\1\origin.mp3
转换完毕,输出至:out\data\1\origin.mp3
data\high.mp3 平均音量:-11.1dB
ffmpeg -i data\high.mp3 -filter:a "volume=1.1dB" out\data\high.mp3
转换完毕,输出至:out\data\high.mp3
data\low.mp3 平均音量:-30.7dB
ffmpeg -i data\low.mp3 -filter:a "volume=20.7dB" out\data\low.mp3
转换完毕,输出至:out\data\low.mp3
data\origin.mp3 平均音量:-20.7dB
ffmpeg -i data\origin.mp3 -filter:a "volume=10.7dB" out\data\origin.mp3
转换完毕,输出至:out\data\origin.mp3
运行完毕
请按任意键继续. . .`

然后可以使用 get_mean_volume.py 再获取下输出文件的平均音量查看情况

3、批量查看文件夹下音频信息(平均音量等)

在步骤1中我们只看了一个,如果你觉得看起来有点慢,基准文件需要批量参考,可以使用这个命令

# 打开cmd,在工程路径下运行以下命令
# 请传入 需要获取平均音量的音频文件夹路径 是否只显示平均音量(是1 否0)
python get_mean_volume_plus.py data\ 1

输出内容

文件夹路径:data\
音频文件总数:4
data\1\origin.mp3 平均音量:-20.7dB
data\high.mp3 平均音量:-11.1dB
data\low.mp3 平均音量:-30.7dB
data\origin.mp3 平均音量:-20.7dB

参考文档

思路参考:https://wenku.baidu.com/view/ac883e43986648d7c1c708a1284ac850ad02042e.html?wkts=1668941587940&bdQuery=python%E8%8E%B7%E5%8F%96%E9%9F%B3%E9%A2%91%E9%9F%B3%E9%87%8F%E5%A4%A7%E5%B0%8F
ffmpeg参考:https://blog.csdn.net/ternence_hsu/article/details/91407681
遍历文件参考:https://blog.csdn.net/weixin_41521681/article/details/92768157

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35660.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Centernet 生成高斯热图

写在前面的话 最近学校阳了,宿舍给封了,宿舍网络不好远程跑不了实验,随缘写一下对CenterNet源码的一个解读,之前写论文的那段时间留下来的工作,respect! 这个文章主要是对CenterNet中生成高斯核的部分代码…

皕杰报表之语义层

1 语义层定义 语义层——是处于数据源与报表之间的一个概念,是用户和数据库之间的一个代码翻译层,通俗的讲是将数据库中的比较凌乱、复杂的数据对象(例如:存储在table中的各个字段的记录)按预先定义好的规则&#xff…

权限管理框架Shiro renren-security权限管理结构

权限管理框架Shiro: 一直在做项目,由于是二次开发的项目,今天才发现自己连权限控制都没有搞懂。二次开发的是基于renren开源的一个项目。 链接:https://gitee.com/renrenio/renren-security 这个项目主要使用shiro权限管理框架来…

31、Java高级特性——Math类、Random类、String类、StringBuffer类、StringBuilder类

目录 一、Math类 1、Math类中的方法 1.1 圆周率:PI 1.2 绝对值:abs() 1.3 返回最小近似值:ceil() 1.4 返回最大近似值 1.5 四舍五入:round() 1.6 最大值和最小值:max()/min() 1.7 求指定次幂 :po…

Java面向对象16:接口的定义与实现

普通类:只有具体的实现 抽象类:具体的实现和规范(抽象方法)都有 接口:只有规范!自己无法写方法,专业的约束,约束和实现分离:面向接口编写(大佬把接口定义好…

vue3 响应式 API 之 ref

ref 是最常用的一个响应式 API,它可以用来定义所有类型的数据,包括 Node 节点和组件。 没错,在 Vue 2 常用的 this.$refs.xxx 来取代 document.querySelector(‘.xxx’) 获取 Node 节点的方式,也是使用这个 API 来取代。 类型声明…

[附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统

[附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM my…

我为什么将机器学习主力语言从Python转到Rust

我为什么将机器学习主力语言从Python转到Rust 文章目录写在前面Python的痛点猴子补丁(Monkey Patch)缺乏参数类型校验允许跨作用域访问运行缓慢太多隐含规则Rust之剑猴子补丁参数类型作用域运行速度隐含规则结论写在前面 首先要声明一下:Python依然是我最喜欢的编程…

S5PV210的启动过程

一、内存 SRAM 静态内存 特点就是容量小、价格高,优点是不需要软件初始化直接上电就能用。DRAM 动态内存 特点就是容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用。 单片机中:内存需求量小,而…

SpringBoot SpringBoot 开发实用篇 6 监控 6.7 自定义端点

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.7 自定义端点6.7.1 问题引入6.7.2 自定义端点6.7.3 小结6.7.…

20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕

20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕 2022/11/25 19:07 01 obs.png obs studio (64bit) 02 obs 设置.png 03 obs 输出.png 04 obs默认为MKV.png 05 obs改mkv为MP4.png 警告:如果文件无法完成(例如&…

供应Alkyne-PEG-Biotin,Alk-PEG-Biotin,炔烃-聚乙二醇-生物素

炔烃-聚乙二醇-生物素是一种化学PEG试剂其英文名为Alkyne-PEG-Biotin(Alk-PEG-Biotin),它所属分类为Alkyne PEG Biotin PEG。 peg试剂的分子量均可定制,有:生物素-聚乙二醇5-炔烃、生物素-PEG 20-炔烃 、Biotin-PEG 2…

【kafka】九、kafka消费者分区分配策略

消费者分区分配策略 分区分配策略 一个consumer group中有个多个topic,一个topic有多个partition,所以必然会涉及到partition的分配问题,即确定哪个partition由哪个消费者进行消费。 kafka有两种分配策略,RoundRobin和Range Ro…

JAVA实训第三天

目录 方法引用 示例 接口 类 测试类 Stream ​编辑 Stream 的操作三个步骤 创建 Stream 的 4 种方法 常见Stream接口的继承关系 Stream的中间操作 中间操作常用方法 Stream的终止操作 Stream的终止操作-collect() 示例代码演示 作业 方法引用 在Lamda新特性的支持下&…

电商商家速看 这些TikTok选品玩法你知道多少?

调查报告显示,有3成的商家在TiTok平台上运营电商,谋求TikTok变现增长。在海内外文化习惯、市场环境存在较大差异的情况下,如何 TikTok选品是他们的主要困难。李先生是具有丰富经验的TikTok电商商家,他表示想要实现TikTok变现增长&…

【RuoYi-Vue-Plus】学习笔记 44 - XSS 过滤器以及 @Xss 注解简单分析

文章目录前言参考目录关于 XSS 攻击框架集成配置说明测试方法一:通过过滤器测试方法二:通过 Xss 注解功能调用流程分析XSS 过滤器启动初始化Form 表单请求过滤JSON 对象请求过滤Xss 注解校验前言 之前在对接口进行传参时发现富文本包含的标签全部被过滤…

成功解决 java.lang.NumberFormatException

急于查看问题原因的小伙伴,直接跳到 问题原因 标题。 问题背景: 今天在写条件查询时遇到这么一个错: ### Error querying databasecause: java.lang.NumberFormatException: For input string: "M ### Cause: iava.lang.NumberFormatE…

Ros驱动Ur5e过程 | 手把手教程 | Ros驱动真实机器人Ur5e | Ros与Ur5e建立通讯 | Ubuntu20.04驱动Ur5e机器人

目录 UR5e连接过程 安装ROS 安装moveit 电脑端UR机器人驱动安装 UR实体机器人-软件安装与通信建立 urcap软件安装 电脑端ip问题 需要指定临时ip的情况 不需指定临时ip UR机器人IP 机器人的启动 驱动UR机器人 电脑-ip : 192.168.56.1 ur5e-ip :192.168.5…

【STM32CubeMX】NRF24L01模块实现“1对1“及“1对多“无线通信

大家好,我是小政。本篇文章我将针对NRF24L01模块实现"1对1"及"1对多"无线通信的STM32CubeMX配置过程进行详细的讲解,让准备学习HAL库的小伙伴能够更好的理解STM32CubeMX如何配置。 NRF24L01模块实现"1对1"及"1对多&q…

【OpenCV-Python】教程:3-9 轮廓(5)轮廓层级

OpenCV Python 轮廓层次 【目标】 学习轮廓的层次关系 在前几个课程里面,学习了 cv2.findContours() 函数, 传递了参数 Contour Retrieval Mode . 通常是 cv.RETR_LIST or cv.RETR_TREE 工作的很好,但是他们是什么意思呢? hierarchy 到底是…