【Python】音频合并与切分——采用moviepy包实现

 注:moviepy包也可以进行视频的合并和切分,暂时没有需求,所以不予实现。

如果觉得好用,请不要吝啬你的点赞哟~

另外,如果有其他需求,欢迎私信我,有条件的话,我会尽可能实现。

# 内容描述:采用moviepy包进行音频的合并和切分
# Author: AbaloneVH     Version: 2024/03/04 14:10
# 前置要求:采用 pip install moviepy 安装该包
# 具体功能
#   1. 根据给定子音频时长切分音频。
#       切分后的音频名为原音频名加“_”和序号。除最后一个子音频外,所有子音频的时长都是给定的子音频时长。
#       示例:audio_split_by_duration(“D:/Desktop/a.mp3”, split_duration=120)  # 子音频时长为 120 秒
#   2. 根据给定子音频大小切分音频。
#       切分后的音频名为原音频名加“_”和序号。除最后一个子音频外,所有子音频的大小均不超过给定子音频大小。
#       【目前的切分方式为按时长均匀切分,该优化方式可以根据需求进一步优化】
#       示例:audio_split_by_size(“D:/Desktop/a.mp3”, split_size=1024*2)  # 子音频大小不超过 2 MB
#   3. 根据给定的子音频列表,按顺序拼接给定的子音频。
#       需指定拼接后音频的名称。
#       示例:audio_concat([“D:/Desktop/a.mp3”, “D:/Desktop/b.mp3”], file_concat_name=“D:/Desktop/ab.mp3”)
#           拼接”a.mp3“和”b.mp3“文件,得到的文件为”ab.mp3”

import os
import numpy as np
from moviepy.editor import *def audio_split_by_duration(file_name, split_duration=60):"""Split the audio file into segments with the given duration.The split segments are with the same extension name as the original file.Author: AbaloneVH   Version: 2024/03/04 14:10Parameters-----------file_name: name of the file.split_duration: duration for each segment. The duration of the last segment may be less than it. Default: 60 s.Examples----------->> audio_split_by_duration(“D:/Desktop/a.mp3”, split_duration=120)  # split_duration is 120 s."""audio = AudioFileClip(file_name)  # load the audio filename, ext = os.path.splitext(file_name)total_duration = audio.duration  # total duration of the audio filesplit_points = list(range(0, int(total_duration), split_duration))split_points.append(int(total_duration))file_list = []for i in range(len(split_points) - 1):start_time = split_points[i]end_time = split_points[i + 1]split_audio = audio.subclip(start_time, end_time)  # split the audio filesplit_audio.write_audiofile(f"{name}_{i}"+ext)  # write the split segmentsfile_list.append(f"{name}_{i}"+ext)audio.close()return file_listdef audio_split_by_size(file_name, split_size=1024):"""Split the audio file into segments with the given size.The split segments are with the same extension name as the original file.Author: AbaloneVH   Version: 2024/03/04 14:10Parameters-----------file_name: name of the file.split_size: maximal size of each segment. Unit: KB. Default: 1024 KB, i.e., 1 MB.Examples----------->> audio_split_by_size(“D:/Desktop/a.mp3”, split_size=1024*2)  # split_size = 2MB"""audio = AudioFileClip(file_name)  # load the audio filename, ext = os.path.splitext(file_name)file_size = os.path.getsize(file_name)/1024  # unit: KBnum_seg = int(np.ceil(file_size/split_size)) + 1total_duration = audio.durationsplit_duration = int(np.ceil(total_duration/num_seg))split_points = list(range(0, int(total_duration), split_duration))split_points.append(int(total_duration))file_list = []for i in range(len(split_points) - 1):start_time = split_points[i]end_time = split_points[i + 1]split_audio = audio.subclip(start_time, end_time)  # split the audio filesplit_audio.write_audiofile(f"{name}_{i}"+ext)  # write the split segmentsfile_list.append(f"{name}_{i}"+ext)audio.close()return file_listdef audio_concat(file_list, file_concat_name):"""Concatenate the audio files into oneAuthor: AbaloneVH   Version: 2024/03/04 14:10Parameters-----------file_list: name list of the audio files to be concatenatedfile_concat_name: name of the concatenated audio fileExamples----------->> audio_concat([“D:/Desktop/a.mp3”, “D:/Desktop/b.mp3”], file_concat_name=“D:/Desktop/ab.mp3”)"""audio_clips = []for sub_file__name in file_list:audio_clips.append(AudioFileClip(sub_file__name))audio_all = concatenate_audioclips(audio_clips)audio_all.write_audiofile(file_concat_name)return file_concat_name# Example
# 1. Split "P1.mp3" into segments, the size of each segment is less than 2 MB
fileName = "P1.mp3"  # name of the audio file to be split
fileList = audio_split_by_size(fileName, split_size=1024*2)# 2. Concatenate the first two segments into one audio file "P_all.mp3"
fileConcatName = "P_all.mp3"  # name of the concatenated audio file
print(audio_concat(fileList[:2], fileConcatName))

参考资料:【Python】如何高效把一个mp3切割成多个30秒的片段(附实操)_python mp3切片-CSDN博客

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

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

相关文章

AI Icon Generator:免费的AI图标生成器,一键生成你想要的图标(附试用链接)

给大家推荐一个免费的AI图标生成器,只需要输入你想要生成的图标内容就可以一键生成图标,可以选择不同风格,完全免费,比如输入“一只在宇宙飞船上的猪!”看看他能生成什么样的效果。 感兴趣的小伙伴快去试试吧&#xff…

一本通1225--金银岛--贪心算法

题目描述 某天KID利用飞行器飞到了一个金银岛上,上面有许多珍贵的金属,KID虽然更喜欢各种宝石的艺术品,可是也不拒绝这样珍贵的金属。但是他只带着一个口袋,口袋至多只能装重量为w的物品。岛上金属有s个种类, 每种金属重量不同&a…

外贸网站做Google SEO 用wordpress模板的优势

易于优化:WordPress模板是专门为搜索引擎优化(SEO)设计的。从一开始,WordPress模板就考虑到了搜索引擎的因素,因此在构建网站时已经考虑了如何优化网站的结构和内容。使用WordPress模板可以简化优化过程,让您的网站更容易被搜索引…

C语言-两数组元素互换

#include <stdio.h> #include <string.h>//两数组元素互换 void swap(int ch1[],int ch2[],int sz) {int i 0;char ch 0;for(i 0;i < sz;i){ch ch1[i];ch1[i] ch2[i];ch2[i] ch;} } //打印数组元素 void print(int ch[],int sz) {int i 0;for(i 0;i <…

uniapp iOS 真机调试

一、下载爱思助手 二、打开爱思助手&#xff0c;把你的 苹果手机 用原装数据线连接至电脑&#xff1a; 找到 工具箱 > 搜索IPA > 打开IAP签名 三、添加 IPA 文件 mac&#xff1a;finder 》应用程序 》右键 HbuilderX 》显示包内容 》HbuilderX / plugins/ lau…

矩阵爆破逆向-条件断点的妙用

不知道你是否使用过IDA的条件断点呢&#xff1f;在IDA进阶使用中&#xff0c;它的很多功能都有大作用&#xff0c;比如&#xff1a;ida-trace来跟踪调用流程。同时IDA的断点功能也十分强大&#xff0c;配合IDA-python的输出语句能够大杀特杀&#xff01; 那么本文就介绍一下这…

基于chatgpt的聊天机器人

基于chatgpt的聊天机器人 以下是一个基于Python的示例代码&#xff0c;展示如何在本地环境中使用预训练的ChatGPT模型构建一个简单的聊天机器人应用程序。在这个示例中&#xff0c;我们将使用Hugging Face Transformers库加载GPT-2模型&#xff0c;并创建一个基于命令行的用户…

Premiere Pro 2024:革新视频编辑,打造专业影视新纪元

在数字化时代&#xff0c;视频已经成为人们获取信息、娱乐消遣的重要媒介。对于视频制作者而言&#xff0c;拥有一款功能强大、易于操作的视频编辑软件至关重要。Premiere Pro 2024&#xff0c;作为Adobe旗下的旗舰视频编辑软件&#xff0c;凭借其卓越的性能和创新的特性&#…

Java 解决异步 @Async 失效问题

1.问题描述 使用Async进行异步处理时&#xff0c;异步没有生效 2.原因分析 经过排查后发现是因为使用Async的方法没有跨2个Service导致的 错误示例 控制器接口 > 直接调用 custAdminService.importCBuy() 3.解决方案 Controller接口不变&#xff0c;多添加一层Service&a…

基于机器学习的曲面拟合方法

随着科技的不断发展&#xff0c;机器学习成为了最近最热门的技术之一&#xff0c;也被广泛应用于各个领域。其中&#xff0c;基于机器学习的曲面拟合方法也备受研究者们的关注。曲面拟合是三维模型处理中的重要技术&#xff0c;其目的是用一组数据点拟合出平滑的曲面&#xff0…

Spring框架学习

Spring&#xff1a; &#xff08;1&#xff09;Bean线程安全问题 &#xff08;2&#xff09;AOP&#xff0c;事务原理&#xff0c;事务失败 &#xff08;3&#xff09;Bean的生命周期 &#xff08;4&#xff09;循环依赖 SpringMVC&#xff1a; &#xff08;1&#xff09…

5201B数据网络测试仪

|5201B数据网络测试仪| | 产品综述 | 电科思仪5201B便携式数据网络测试仪&#xff0c;集成高性能IP基础测试硬件平台&#xff0c;提供L2-L3流量测试及协议仿真解决方案&#xff0c;支持以太网报文线速生成与分析、统计、报文捕获&#xff0c;以及路由、接入、组播、数据中心等协…

基于深度学习的烟雾检测系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主干c…

艾利特机械臂ROS

# Elite-Robot-ROS - 系统平台&#xff1a;Ubuntu20.04 - ROS版本&#xff1a;Noetic ## README [Chinese README](https://github.com/Elite-Robots/ROS/blob/master/README.CH.md) [English README](https://github.com/Elite-Robots/ROS/blob/master/README.md) ## 文…

位运算符--文章链接

【详解】位运算符--正数及负数的位运算 【详解】位运算符--正数及负数的位运算_负操作数减去正操作数位符号位如何位正-CSDN博客 【必备算法】位运算&#xff1a;常见位运算符及规律 【必备算法】位运算&#xff1a;常见位运算符及规律-蒲公英云 (dandelioncloud.cn) 位运算符…

Element(Java后端入门篇)

Element&#xff08;Java后端入门篇&#xff09; Element:是饿了么公司前端开发团队提供的一套基于Vue的网站组件库&#xff0c;用于快速构建网页组件&#xff1a;组成网页的部件&#xff0c;例如超链接、按钮、图片、表格等等~ Element快速入门 引入Element的css、js文件和V…

(学习日记)2024.03.04:UCOSIII第六节:main函数+前六节总结

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

SwiftUI中界面跳转的实现与管理

在SwiftUI中&#xff0c;界面跳转的实现与管理主要通过以下几种方式&#xff1a; 使用NavigationView和NavigationLink&#xff1a;使用NavigationView作为根视图&#xff0c;通过NavigationLink在不同的视图之间进行跳转。例如&#xff1a; NavigationView {List {ForEach(i…

符号函数Sign(博途PLC SCL代码)

符号函数在ADRC自抗扰算法里会有涉及,同时在滑膜控制里也会用到,这篇博客我们介绍符号函数在博途PLC里的实现。 1、ADRC自抗扰算法: https://rxxw-control.blog.csdn.net/article/details/126547180https://rxxw-control.blog.csdn.net/article/details/1265471802、模拟量…

开新局、开好局,2024上海国际袜交会CHPE倒计时20天

开新局、开好局&#xff0c;2024上海国际袜交会CHPE倒计时20天 中国是全球第一的袜子生产及出口国。回首2023年&#xff0c;是国内袜子产业沉淀变革的一年。而2024年&#xff0c;各袜企既需要再度攻坚克难&#xff0c;也将会厚积薄发。随着国内消费需求的逐步回暖和改善&#x…