- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python使用pydub模块转换音频格式以及对音频进行剪辑由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
近端时间看了一个短视频,觉得视频的背景音乐片段很不错,想把这个背景音乐得到,虽然小编运用Python爬虫肯定能得到这首音乐,但是这个音乐片段肯定是得不到的,于是网上看一下相关官方文档,没想到python真的有模块可以满足要求,这又让我想起自己CSDN界面的那段话了,“在Python面前,只有你想不到的,没有Python做不到的”.
需要的Python模块是标题上提到的那个,pydub,这个模块可以实现对音频文件的剪辑、转换音频格式等。pydub是python的高级一个音频处理库,自带的wave模块只能处理 wav 格式的音频文件,如果要想处理类似MP3格式的文件,就得要装 ffmpeg或者libav了。pydub依赖于ffmpeg,这里选择安装ffmpeg.
下载命令,在cmd上输入pip install pydub即可 。
除了下载pydub这个模块之外,还需要下载ffmpeg这个多媒体处理工具,否则,即使在代码中指定音频文件路径没有错误,运行结构也会报错。如下:
下载这个之后,就不会报这个错误了,下载网址为:ffmpeg 。
在这个网址下面找一个和自己电脑系统一样的版本下载即可,下载完成之后,解压,好像不配置环境变量,程序也可以正常执行,不过,最好还是配置环境变量.
其实,实现音频剪辑和转换音频格式的代码总共就几行代码,只不过需要输入一些参数值,因此代码量相对而言多了起来.
关键代码为
1
2
3
4
5
|
from
pydub
import
AudioSegment
sound
=
AudioSegment.from_file(
file
=
'./music/刺客.mp3'
,
format
=
'mp3'
)
sound
=
sound[start:end]
# start,end两个参数用于对音频进行剪辑
sound.export(out_f
=
'./music/刺客.wav'
,
format
=
'wav'
)
# 用于保存剪辑之后的音频文件
|
当然读者想了解更多有关这个模块的使用,可以来看看官方文档啊! 。
文档连接为:pydub 。
文档中讲了有关音频合并、音频重复等知识点喔!.
最终实现代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
from
pydub
import
AudioSegment
import
sys
class
Music(
object
):
def
__init__(
self
,
file
,file_type,start,end,save_file,save_file_type):
self
.sound
=
AudioSegment.from_file(
file
=
file
,
format
=
file_type)
self
.start
=
start
# 剪辑音频文件开始时间
self
.end
=
end
# 剪辑音频文件的结束时间
self
.save_file
=
save_file
# 保存音频文件的路径
self
.save_file_type
=
save_file_type
# 保存音频文件的类型
def
editedMusic(
self
):
# 定义方法用于剪辑音频
# 对于传入的start,end参数进行一些字符串处理
## 对传入的开始时间进行字符串处理
if
self
.start
=
=
'0'
or
self
.start
=
=
'':
# 从头开始处理音频文件
start_time
=
0
elif
":"
in
self
.start:
# 从音频中间处理
list_1
=
self
.start.split(
":"
)
start_time
=
int
(list_1[
0
])
*
60
+
int
(list_1[
1
])
else
:
# 如果是其他情况,提示错误,并退出程序
print
(
"你输入的初始截取时间有问题"
)
sys.exit()
start_time
*
=
1000
# 毫秒作为单位,需要在原来秒数的基础上再乘以1000
if
start_time>
=
len
(
self
.sound):
# 如果初始截取时间大于或等于音频文件总时间
print
(
'你输入的初始截取时间大于该音频文件总时间,故无法进行剪辑操作'
)
sys.exit()
## 对传入的结束时间进行字符串处理
if
self
.end
=
=
'':
end_time
=
len
(
self
.sound)
# 如果输入结束时间为空,表示截取到音频文件最后
elif
':'
in
self
.end:
list_2
=
self
.end.split(
':'
)
end_time
=
int
(list_2[
0
])
*
60
+
int
(list_2[
1
])
else
:
print
(
"你输入的结束截取时间有问题"
)
sys.exit()
end_time
*
=
1000
self
.sound
=
self
.sound[start_time:end_time]
# 对音频文件进行剪辑
self
.saveFile()
def
saveFile(
self
):
self
.sound.export(out_f
=
self
.save_file,
format
=
self
.save_file_type)
# 保存已经进行剪辑的音频文件
print
(
'已成功转换!'
)
if
__name__
=
=
'__main__'
:
print
(
'1.可以将音频文件转换其他格式的音频文件\n2.可用剪辑音频文件\n'
)
print
(
'='
*
50
)
file
=
input
(
'建议:\n(1.音频文件和运行文件在同一个文件夹下面,最好使用相对路径)\n(2.音频文件和运行文件不在同一个文件夹下面,最好用绝对路径)\n请输入要剪辑的文件路径:'
)
file_type
=
file
[
file
.rfind(
'.'
)
+
1
:]
# 音频文件类型 mp3、wav
start
=
input
(
"(可用输入0,空格,(1:1,1分1秒):)\n输入开始截取时间:"
)
end
=
input
(
"(可用输入空格,(1:1,1分1秒):)\n输入结束截取时间:"
)
save_file
=
input
(
"请输入剪辑之后保存的文件路径:"
)
save_file_type
=
save_file[save_file.rfind(
'.'
)
+
1
:]
music
=
Music(
file
,file_type,start,end,save_file,save_file_type)
music.editedMusic()
# 1:12 1:36
|
当然,这个模块好像还可以满足一些用户改变音乐音质的需求,export()方法里面有一个参数bitrate比特率,百度了一下这个东西,好像对音频音质有一定影响.
到此这篇关于Python使用pydub模块转换音频格式以及对音频进行剪辑的文章就介绍到这了,更多相关Python转换音频格式内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/qq_45404396/article/details/117397212 。
最后此篇关于Python使用pydub模块转换音频格式以及对音频进行剪辑的文章就讲到这里了,如果你想了解更多关于Python使用pydub模块转换音频格式以及对音频进行剪辑的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
; template person (deftemplate person (slot name (type STRING)) (slot gender (type SYMBOL)(allowed-s
我正在尝试使用 AudioRecord 从麦克风录制一些音频。录音有效,但音量太大,而且我的剪报很糟糕。我尝试使用 AutomaticGainControl,但它在我的设备上不可用。有没有其他方法可以
我正在开发一个小应用程序,用户可以在其中用手指在屏幕上移动背景。 background-position 由手指的位置定义。 我用的是angular,所以我有这种标签: 在我的 Cont
拥有 ag-grid v8.20 的 ag-grid(Angular 组件) 不幸的是,如果上下文菜单大于网格,它会被剪裁: (截图应该在这里,但我不能上传它,imgur bug?) 有没有办法让上下
我需要从 ListBox 中浮出一些内容如 DataTemplate 中指定的那样对于 ListBox.ItemTemplate .我正在使用 RenderTransform但内容被剪掉了 ListB
我有这个作业(我是学生),在 CLIPS 中,但是我无法取得任何进展,尽管在谷歌上搜索并花了一些时间。 (clear) (deftemplate book (multislot surname
我正在尝试在具有圆形路径的图像上使用“剪辑路径”。我知道有可能使用 svg 剪辑路径,但我认为它不可能让它真正响应 - 所以我决定在图像下方的 div 上使用 svg 图形 - 但我仍然有移动 Vie
我正在尝试在具有圆形路径的图像上使用“剪辑路径”。我知道有可能使用 svg 剪辑路径,但我认为它不可能让它真正响应 - 所以我决定在图像下方的 div 上使用 svg 图形 - 但我仍然有移动 Vie
背景 我们有一个 TIME 数据类型的列来指示耗时。 问题 当我们尝试插入大于 24 的小时数时,例如“25:00:00”,MySQL 会将此值裁剪为“01:00:00”,这不是我们想要的。 尝试的解
基本上,我正在创建一个包含两个图像的 View 。图像一显示在占据 View 左上角的直角三角形中,图像二显示在占据 View 右下角的直角三角形中。 想象一下沿对角线切割正方形,结果的每一半中存在不
我目前正在为单页网站制作剪切路径: http://grafomantestsite3.be/ 如您所见,这适用于 chrome,但不适用于 firefox、opera 等。 我做了一个代码笔来说明我的
我的 CSS 文件中有一行: clip: rect(0 0 0 0); 我看到 clip 现在已贬值,所以我尝试使用 clip-path。 clip-path 的等价物是什么? 是吗: clip-pa
我有两个 div,子 div 在父 div 中。 div child 比他的 parent 大。所以我决定在 div 父级中放置一个滚动条,因为我可以更好地看到 div 子级的内容。 问题是现在我需要
我正在为全屏背景图像在 WordPress 中编写 CSS。为了摆脱左侧的黑色矩形(菜单/侧边栏),我使用了下面的 CSS。 它在 chrome、IE 和移动设备上运行良好,但在 mac/safa
我想制作一个用户程序,它提取元素 a,其中元素 b(由参数给定)作为列表中的一对。 比如,如果我将 c 作为参数并列出 ((c a) (c b) (d f) (d g)),结果应该是 'a' 'b';
我是 Android 新手,我有两张图片,一张是空图片,另一张是代表进度条的完整图片。 如何使用 canvas.drawBitmap 只绘制整个图像的一部分? 我不想每次都调整位图图像的大小。 最佳答
我调整了我的字符串的大小以最大限度地适应高度(1 行),以便截断任何过大的宽度(如在字形中间),lineBreakMode:UILineBreakModeClip 应该这样做。相反,文本似乎通过仅绘制
我使用的导航 Controller 略微偏离屏幕边缘。当我尝试为导航 Controller 框架之外的 subview 设置动画时,它们会被剪裁。我试过设置: navigationController
我正在尝试使用 CSS3 转换为 CSS clip 设置动画,但没有成功。图像只是剪辑而没有过渡。 我错过了什么? #clipped { position:absolute; widt
我有一个 UITextView 显示一些大小可以变化的动态内容。textview 不允许滚动,它的大小与内容无关。考虑到它的自动布局约束,例如, TextView 在 iphone5 和 iPhone
我是一名优秀的程序员,十分优秀!