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,一经查实,立即删除!

相关文章

深度学习的学习笔记帖子2

人脸数据集的介绍: https://zhuanlan.zhihu.com/p/362356480 https://blog.csdn.net/bjbz_cxy/article/details/122210641 CASIAWebFace人脸数据集等的github: https://github.com/deepinsight/insightface/blob/master/recognition/datasets/README.md…

蓝桥杯基础知识点9 stack、queue、priority_queue

蓝桥杯基础知识点9 stack、queue、priority_queue 01 stack的定义和结构 stack是一种后进先出&#xff08;LIFO&#xff09;的数据结构&#xff0c;头文件<stcak>。 template <class T, class Container deque<T>> class stack; T&#xff1a;存储在stack…

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

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

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

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

memcpy和strcat的区别

memcpy 函数&#xff1a; memcpy 函数用于在内存之间复制一定数量的字节。memcpy 是按字节进行复制的&#xff0c;可以用于复制任意类型的数据&#xff0c;不仅限于字符串。memcpy 不会自动添加字符串结束符号 \0&#xff0c;因此在复制字符串时&#xff0c;需要确保复制的字节…

喝点小酒-胡诌“编程语言学习”

今天&#xff0c; 与一个小哥们儿&#xff08;学习计算机科学与技术专业的&#xff0c;我儿子&#xff0c;这是真的&#xff09;一块儿吃饭&#xff08;这顿饭&#xff0c;在家里吃的&#xff0c;吹个牛哈&#xff0c;我做的&#xff0c;三个荤菜、一个素材、一个汤、主食米饭 …

约瑟夫经典问题C++,STL容器queue解法

题目&#xff1a; Description n 个人围成一圈&#xff0c;从第一个人开始报数,数到 m 的人出列&#xff0c;再由下一个人重新从 1 开始报数&#xff0c;数到m 的人再出圈&#xff0c;依次类推&#xff0c;直到所有的人都出圈&#xff0c;请输出依次出圈人的编号。 注意&…

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

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

Three.js初学(2)

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

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

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

华为配置直连三层组网隧道转发示例

配置直连三层组网隧道转发示例 组网图形 图1 配置直连三层组网隧道转发示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件扩展阅读 业务需求 企业用户接入WLAN网络&#xff0c;以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时&#xff0c;不…

Linux 系统编程:文件编程

本篇涉及文件的创建、打开、读和关闭。 文件为操作系统服务和设备提供了一个简单而一致的 接口 。“接口”指的是一种约定或标准&#xff0c;通过提供一个一致的接口&#xff0c;可以为上层隐藏底层硬件和服务的复杂性&#xff0c;上层无需关注它们的具体实现细节。 比如操作系…

Kafka进阶

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

随机森林模型、模型模拟技术和决策树模型简介

随机森林模型、模型模拟技术和决策树模型简介 随机森林模型 随机森林模型是一种比较新的机器学习模型&#xff0c;它是通过集成学习的方法将多个决策树模型组合起来&#xff0c;形成一个更加强大和稳定的模型。随机森林模型的基本原理是“数据随机”和“特征随机”&#xff0…

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

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

Vista 2.08: The storm chaser

A story about Mathew —— the storm chaser. "He is too young to understand his dream and the Harvard is just others dream put into his mind." "You dont have to chase for the happiness that defined by others. You must define your own happines…

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

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

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

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

RMAN备份与恢复

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

在做了frp的实验室服务器不同端口间传输文件

背景 实验室有两台服务器&#xff0c;使用的是一个IP&#xff0c;两个端口&#xff0c;给人看上去是一台服务器的两个端口&#xff0c;实际是两台服务器。 现在我需要从一个端口传输一个文件夹到另外一个端口&#xff0c;实际上是从一个机器传输到另外一个机器。 操作 在两台…