Python实战之多种音乐格式批量转换
作者:Ckend 发布时间:2023-07-12 20:24:42
Pydub是一个基于ffmpeg的Python音频处理模块,封装了许多ffmpeg底层接口,因此用它来做音乐歌曲文件格式转换会非常方便,如果你阅读过我们之前的文章:3行Python代码实现剪辑音乐 你就知道它有多么强大了。
今天给大家介绍它的音乐文件格式转换功能,几乎支持所有音乐音频格式,非常强大。
1.安装
安装Pydub前需要先安装ffmpeg:
Mac (打开终端(Terminal), 用 homebrew 安装):
brew install ffmpeg --with-libvorbis --with-sdl2 --with-theora
Linux:
apt-get install ffmpeg libavcodec-extra
Windows:
1. 进入 http://ffmpeg.org/download.html#build-windows,点击 windows 对应的图标,进入下载界面点击 download 下载按钮,
2. 解压下载好的zip文件到指定目录
3. 将解压后的文件目录中 bin 目录(包含 ffmpeg.exe )添加进 path 环境变量中
上述ffmpeg安装成功后就可以打开命令提示符(cmd),安装pydub:
pip install pydub
2.mp3转wav或其他格式
将单个mp3音频文件转化为wav音频格式:
from pydub import AudioSegment
def trans_mp3_to_wav(filepath):
"""
将mp3文件转化为wav格式
Args:
filepath (str): 文件路径
"""
song = AudioSegment.from_mp3(filepath)
filename = filepath.split(".")[0]
song.export(f"{filename}.wav", format="wav")
微信公众号里代码字体实在是太大了,而且有时候没有高亮提醒,这里多提供一个图片版代码(下同):
可以继续封装该函数,将单个mp3文件转化为任意其他音乐音频格式:
from pydub import AudioSegment
def trans_mp3_to_any_audio(filepath, audio_type):
"""
将mp3文件转化为任意音频文件格式
Args:
filepath (str): 文件路径
audio_type(str): 文件格式
"""
song = AudioSegment.from_mp3(filepath)
filename = filepath.split(".")[0]
song.export(f"{filename}.{audio_type}", format=f"{audio_type}")
图片版代码:
如ogg格式:
trans_mp3_to_any_audio("Alone.mp3", "ogg")
只要是ffmpeg支持的音乐音频格式,它都可以转换,支持的格式长达几十个,下面我简单列一些:
wav | avi | mp4 | flv |
ogg | flac | ape | mp2 |
aiff | voc | au |
3.更加通用的转换函数
刚刚是mp3转任意音频格式,我希望把它写成任意音频格式转任意音频格式:
from pydub import AudioSegment
def trans_any_audio_types(filepath, input_audio_type, output_audio_type):
"""
将任意音频文件格式转化为任意音频文件格式
Args:
filepath (str): 文件路径
input_audio_type(str): 输入音频文件格式
output_audio_type(str): 输出音频文件格式
"""
song = AudioSegment.from_file(filepath, input_audio_type)
filename = filepath.split(".")[0]
song.export(f"{filename}.{output_audio_type}", format=f"{output_audio_type}")
图片版代码:
比如将ogg音乐音频格式转化为flv音乐音频格式:
trans_any_audio_types("Alone.ogg", "ogg", "flv")
或者MP4格式,总之,一般而言你需要的格式它都能满足。
trans_any_audio_types("Alone.ogg", "ogg", "mp4")
4.批量转化音频格式
现在,尝试将一个文件夹下的所有非mp3音频格式的文件转化为mp3音频格式:
def trans_all_file(files_path, target="mp3"):
"""
批量转化音频音乐格式
Args:
files_path (str): 文件夹路径
target (str, optional): 目标音乐格式. Defaults to "mp3".
"""
for filepath in os.listdir(files_path):
# 路径处理
modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
datapath = os.path.join(modpath, files_path + filepath)
# 分割为文件名字和后缀并载入文件
input_audio = os.path.splitext(datapath)
song = AudioSegment.from_file(datapath, input_audio[-1].split(".")[-1])
# 导出
song.export(f"{input_audio[0]}.{target}", format=target)
图片版代码:
只要输入文件夹名称,即可全部转化该文件夹下的音乐文件格式为mp3格式:
trans_all_file("F:\\push\\20200607\\music\\")
来源:https://mp.weixin.qq.com/s/5IhYzOmCQkPTqEBCg_pw8Q
猜你喜欢
- 微信小程序中的下拉刷新,上拉加载的功能很常见,目前我知道的有两种可行的方法,一是scroll-view,二是整个页面刷新.今天说说第一种,自
- 具体代码和说明如下:upload.asp<form action=http://<%= Request.&n
- 一、备份数据库 1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server
- 内码问题.用这段代码的吧,我已经改得很精简了.使用XMLHTTP抓取地址并进次内容处理Function GetBody(Url) Dim o
- Python中常用到的两种标准化输入方式:分别sys.stdin和input,两者使用方式大致相同,但是总的来说sys.stdin使用方式更
- 前言订单并发这个问题我想大家都是有一定认识的,这里我说一下我的一些浅见,我会尽可能的让大家了解如何解决这类问题。在解释如何解决订单并发问题之
- 背景需要遍历结构体的所有field对于exported的field, 动态set这个field的value对于unexported的fiel
- 因为写别的程序想要一边遍历一边删除列表里的元素,就写了一个这样的程序进行测试,这样写出来感觉还挺简洁的,就发出来分享一下。代码l=list(
- 前言最小二乘 * east Square Method,做为分类回归算法的基础,有着悠久的历史(由马里·勒让德于1806年提出)。它通过最小化
- python编写计算器,供大家参考,具体内容如下(1)计算器界面如下:(2)基本满足了计算器的所有需求,使用时不可键盘输入,只能鼠标点击左键
- 1.概述"""基础知识:1.多任务:操作系统可以同时运行多个任务;2.单核CPU执行多任务:操作系统轮流让各个
- 代码如下: '排序 Function Sort1(ary) Dim KeepChecking,I,FirstValue,Second
- 对于php和mysql的连接在许多blog上都有说明,为了将mysql中的查询,修改,插入等操作掌握,本文介绍了一下如何采用mysql做一个
- 一、功能目标用户输入一个类似 1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568
- 使用索引的场景:阿里云日志里出现了慢sql 然后发现publish_works_id字段会经常用于一些关联,所以决定把这个字段加上
- 链接字典chainMap是逻辑上合并两个字典为一个逻辑单元,合并后的结构实际上是一个列表,只是逻辑上是仍然为一个字典(并未生成新的),对此列
- 一、xlrd的安装打开cmd输入pip install xlrd安装完成即可二、xlrd模块的使用下面以这个工作簿为例1、导入模块impor
- 1,效果图 2,实现方法const columns = [ { title: '序号',
- 本文实例讲述了Python使用pickle模块报错EOFError Ran out of input的解决方法。分享给大家供大家参考,具体如
- 0x00:事先说明你已经攻陷了对方主机且获得了最高权限。对方的本地防火墙会丢弃所有的外来数据包。这个后门不会仅绑定在某一个端口上。这段代码很