ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整

文章目录

  • ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整
    • 获取音频长度
      • pydub获取音频长度
        • 获取时长
        • 精确到秒
        • 格式设定
      • mutagen获取音频长度
    • 调整音量
    • 视频音量调整
    • 注意事项

ChatGPT实战100例 - (17) 用ChatGPT实现音频长度测量和音量调整

请添加图片描述

老王媳妇说上次那个pip挺好用的,就是长度这个有点迷茫,
那就测下吧

获取音频长度

使用 pydub 和 mutagen 库都可以获取MP3文件的长度。

pydub获取音频长度

获取时长
from pydub.utils import mediainfodef get_duration(filename):info = mediainfo(filename)duration = info['duration']return durationfilename = 'yourfile.mp3'
print(get_duration(filename))
精确到秒
from pydub.utils import mediainfodef get_duration(filename):info = mediainfo(filename)duration = round(float(info['duration']))return durationfilename = 'yourfile.mp3'
print(get_duration(filename))
格式设定

如果你需要将获取的时长转换为 “03:03” 这样的格式, 可以首先将时长转换为整数(秒数), 然后通过除法和取余运算获取分钟和秒, 然后将这些值格式化为字符串。这是一个示例:

def get_duration(filename):info = mediainfo(filename)duration = int(float(info['duration']))  # change to intminutes, seconds = divmod(duration, 60)  # get minutes and secondsreturn "{:02d}:{:02d}".format(minutes, seconds)  # format as stringfilename = 'yourfile.mp3'
print(get_duration(filename))

这个函数将返回一个字符串,比如 “03:03”。

mutagen获取音频长度

如果你想使用的是mutagen库,可以这样做:

from mutagen.mp3 import MP3def get_duration(filename):audio = MP3(filename)duration = audio.info.lengthreturn durationfilename = 'yourfile.mp3'
print(get_duration(filename))

同样,如果需要精确到秒级+格式化如上pydub的处理操作即可

调整音量

老王媳妇说这小视频挺好的,就是声音有点大,
安排!

使用pydub直接调整mp3音量

以下是一个可以用于调整mp3音量的函数,使用pydub库:

from pydub import AudioSegmentdef adjust_audio_db(input_file, output_file, db):song = AudioSegment.from_mp3(input_file)adjusted_song = song + dbadjusted_song.export(output_file, format="mp3")# 使用函数:
adjust_audio_db('input.mp3', 'output.mp3', -10)

在这个函数中,input_fileoutput_file是输入和输出音频文件的路径,db是想要增加或减少的分贝数。首先,函数加载输入文件,然后调整音量,最后导出修改后的音频到output_file。注意db可以是负数,如果你想降低音量。

请确保已经正确安装了pydub和ffmpeg,因为pydub需要ffmpeg进行音频编解码。

设定音量为随机值

如果你想让音量设定为一个随机值,你可以通过引入Python的random库来实现这一点。这里是如何修改上面的函数,以便音量增减设置为一个随机值:

from pydub import AudioSegment
import randomdef adjust_audio_random_db(input_file, output_file, min_db, max_db):song = AudioSegment.from_mp3(input_file)# 生成一个介于min_db和max_db之间的随机分贝值db_change = random.randint(min_db, max_db)adjusted_song = song + db_changeadjusted_song.export(output_file, format="mp3")# 使用函数:
adjust_audio_random_db('input.mp3', 'output.mp3', -5, 5)

在这个修改版函数中,min_dbmax_db定义了可能的分贝变化范围。random.randint(min_db, max_db)会生成一个在这个范围内的随机整数,这个值可以是正的(增加音量)或负的(减少音量)。然后,这个随机生成的分贝值被用来调整音频的音量。

记住,使用随机分贝变化时要谨慎选择min_dbmax_db的值,以确保音量的变化在可接受的范围内,不会对听者造成不适。

老王媳妇:你搞错了
我:对对,先试试水么,马上安排

视频音量调整

调整原视频中的音频信号db,随机到-30到-20之间

你可以使用moviepy库中的AudioClip的fx函数来改变音频信号的db。volumex函数可以用于改变音频的音量,参数是音量的倍数,比如0.5表示降低一半的音量。

volumex函数的参数是一个对数尺度,所以如果你想把db调整到-30到-20之间,你需要把这个范围转换成线性尺度。对数尺度和线性尺度的转换公式是 value_in_linear_scale = 10^(value_in_db_scale/20)

这个转换是因为人耳对声音的感知是对数的。例如,如果一个声音的音量是另一个的两倍,我们感觉到的并不是两倍的响,而是稍微大一点。因此,在对数尺度上,增加10db大约意味着将音量加倍。

以下是一个如何用moviepy调整音频db的示例:

from moviepy.editor import VideoFileClip
import numpy as np# 打开视频
clip = VideoFileClip('video.mp4')# 生成-30到-20之间的随机数
db = np.random.uniform(-30, -20)# 转换到线性尺度
linear = 10 ** (db / 20)# 调整音频
clip = clip.fx(vfx.volumex, linear)# 输出到文件
clip.write_videofile('output.mp4')

这段代码首先打开输入视频,然后生成-30到-20之间的随机db值,并把这个值转换成线性尺度。然后用vfx.volumex函数调整音频的音量。最后将视频输出到文件。

提取函数

你可以使用moviepy库中的AudioClip的fx函数来改变音频信号的db。volumex函数可以用于改变音频的音量,参数是音量的倍数,比如0.5表示降低一半的音量。

volumex函数的参数是一个对数尺度,所以如果你想把db调整到-30到-20之间,你需要把这个范围转换成线性尺度。对数尺度和线性尺度的转换公式是 value_in_linear_scale = 10^(value_in_db_scale/20)

这个转换是因为人耳对声音的感知是对数的。例如,如果一个声音的音量是另一个的两倍,我们感觉到的并不是两倍的响,而是稍微大一点。因此,在对数尺度上,增加10db大约意味着将音量加倍。

以下是一个如何用moviepy调整音频db的示例:

from moviepy.editor import VideoFileClip
import numpy as np# 打开视频
clip = VideoFileClip('video.mp4')# 生成-30到-20之间的随机数
db = np.random.uniform(-30, -20)# 转换到线性尺度
linear = 10 ** (db / 20)# 调整音频
clip = clip.fx(vfx.volumex, linear)# 输出到文件
clip.write_videofile('output.mp4')

这段代码首先打开输入视频,然后生成-30到-20之间的随机db值,并把这个值转换成线性尺度。然后用vfx.volumex函数调整音频的音量。最后将视频输出到文件。

注意事项

长度也测了,声音也小了,老王媳妇终于学会丝滑混剪短视频了。
请添加图片描述

继续pip

pip install pydub mutagen moviepy

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

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

相关文章

《VitePress 简易速速上手小册》第7章 高级功能与动态内容(2024 最新版)

文章目录 7.1 动态路由与 API 集成7.1.1 基础知识点解析7.1.2 重点案例:技术博客7.1.3 拓展案例 1:电商网站7.1.4 拓展案例 2:事件管理网站 7.2 状态管理与 Vuex 使用7.2.1 基础知识点解析7.2.2 重点案例:用户认证系统7.2.3 拓展案…

力扣精选算法100道——Z字形变换(模拟专题)

目录 🎈了解题意 🎈算法原理 🚩先处理第一行和最后一行 🚩再处理中间行 🎈实现代码 🎈了解题意 大家看到这个题目的时候肯定是很迷茫的,包括我自己也是搞不清楚题目什么意思,我…

[linux]进程间通信(IPC)———共享内存(shm)(什么是共享内存,共享内存的原理图,共享内存的接口,使用演示)

一、什么是共享内存 共享内存区是最快的(进程间通信)IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。注意:…

Three.js初学(2)

Three.js初学(2) 三维坐标系的认识1. 辅助坐标系 光源的影响1. 光材质的影响2. 光源介绍点光源环境光平行光 3. 光源衰减/位置 相机控件1. 引入扩展库2. 使用方法 三维坐标系的认识 这一章节的主要作用是加强自我对三维坐标空间的认识。 1. 辅助坐标系…

猫头虎分享已解决Bug || TypeError: Cannot set property ‘innerHTML‘ of null

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

Kafka进阶

文章目录 概要应用场景消息队列两种模式kafka的基础架构分区常见问题小结 概要 kafka的传统定义:kafka是一个分布式的基于发布\订阅模式的消息队列,主要用于大数据实时处理领域。 kafka的最新概念:kafka是一个开源的分布式事件流平台&#x…

10种常见的光伏发电量计算方法

光伏发电是一种将太阳能转化为电能的清洁能源技术。随着环境保护意识的日益增强和能源结构的转型,光伏发电得到了广泛的应用。对于光伏系统来说,发电量的准确计算是评估系统性能、预测长期收益和优化系统运行的关键。以下是常见的光伏发电量计算方法&…

Python3零基础教程之Python解释器与开发环境搭建

大家好,我是千与编程,硕士毕业于北京大学,曾先后就职于字节跳动,京东等互联网大厂,目前在编程导航知识星球担任星球嘉宾,著有《AI算法毕设智囊袋》,《保姆级带你通关秋招教程》两大专栏。 今天开…

从it方面介绍部分好玩的电影

电影推荐 1.《黑客帝国》《The matrix》 仅推荐第一二三部2. 《代码奔腾》《code rush》3 人物传记类 《社交网络》 《硅谷传奇》 《乔布斯》4《模仿游戏》也是传记 但主演是 卷福5 《环形使者》6 《蝴蝶效应》 三部7.《隐私大盗》8.《监视资本主义:智能陷阱》9. 剧…

RMAN备份与恢复

文章目录 一、RMAN介绍二、全量备份三、增量备份0级备份1级增量备份累积性差量备份总结 四、压缩备份压缩备份介绍压缩备份操作压缩备份优缺点 五、异常恢复1、恢复前的准备2、恢复数据库 六、RMAN相关参数 一、RMAN介绍 RMAN(Recovery Manager)是Oracl…

thonny 使用命令行安装包并且替换源,安装速度嗖嗖的

thonny 使用命令行安装包并且替换源 点击 “工具”->"打开系统shell"替换源下载嘎嘎快 点击 “工具”->“打开系统shell” 替换源 pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/ pip config set global.trusted-host mirrors.aliy…

快速学习安全框架 Springsecurity最新版(6.2)--用户授权模块

简介 上一节Springsecurity 用户认证 Springsecurity 拥有强大的认证和授权功能并且非常灵活,,一来说我们都i有以下需求 可以帮助应用程序实现以下两种常见的授权需求: 用户-权限-资源:例如张三的权限是添加用户、查看用户列表,李…

康威生命游戏

康威生命游戏 康威生命游戏(Conway’s Game of Life)是康威发明的细胞自动机。 生命游戏有几个简单的规则&#xff1a; 细胞有两种状态&#xff0c;存活或死亡&#xff0c;每个细胞以自身为中心与周围的八格细胞互动。 对于存活的细胞&#xff1a; 当周围的细胞过少(<2)或…

【Linux】:简易实现自动化构建代码make/Makefile

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux自动化构建代码make/makefile的使用&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&…

Leo赠书活动-18期 《高效使用Redis》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

Ubuntu22部署MySQL5.7详细教程

Ubuntu22部署MySQL5.7详细教程 一、下载MySQL安装包二、安装MySQL三、启动MySQL检查状态登录MySQL 四、开启远程访问功能1、允许其他主机通过root访问数据库2、修改配置文件&#xff0c;允许其他IP通过自定义端口访问 五、使用Navicat连接数据库 默认情况下&#xff0c;Ubuntu2…

Android的ViewModel

前言 在Compose的学习中&#xff0c;我们在可组合函数中使用rememberSaveable​​​​​​​保存应用数据&#xff0c;但这可能意味着将逻辑保留在可组合函数中或附近。随着应用体量不断变大&#xff0c;您应将数据和逻辑从可组合函数中移出。 而在之前的应用架构学习中&…

【测试开发项目】个人博客项目测试报告

文章目录 前言 一、项目背景 二、项目功能 三、测试用例设计 3.1 个人博客项目测试用例设计 3.1.1 博客登录页测试用例设计 3.1.2 博客列表页测试用例设计 3.1.3 博客详情页测试用例设计 3.1.4 博客编辑页测试用…

从数据库中读取文件导出为Excel

使用的库&#xff08;org.apache.poi&#xff09; 在poi包中有Apache提供的各种分类文件&#xff0c;如下 结构功能HSSF读写Microsoft Excel XLS文件XSSF读写Microsoft Excel OOXML XLSX文件HWPF读写Microsoft Word DOC文件HSLF读写Microsoft PowerPoint文件 下面以XSSF为例&…

【STM32学习】——续上:软件SPI读写W25Q64SPI通信外设硬件SPI读写W25Q64

四、软件SPI读写W25Q64 工程思路与I2C类似&#xff0c;MySPI.c是通信底层&#xff0c;主要包括通信引脚封装、初始化、SPI通信的三个拼图&#xff08;起始、终止和交换一个字节&#xff09;&#xff1b;基于此文件建立W25Q64.c&#xff0c;调用MySPI三个拼图&#xff0c;拼接成…