Python 多种音乐格式批量转换实战教程

共 4162字,需浏览 9分钟

 ·

2022-08-11 21:41


Pydub是一个基于ffmpeg的Python音频处理模块,封装了许多ffmpeg底层接口,因此用它来做音乐歌曲文件格式转换会非常方便。


如果你阅读过我们之前的文章,就知道 Pydub 有多么强大了。


今天给大家介绍它的音乐文件格式转换功能,几乎支持所有音乐音频格式,非常牛逼。

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)或终端(Terminal),安装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支持的音乐音频格式,它都可以转换,支持的格式长达几十个,下面我简单列一些:

wavavimp4flv
oggflacapemp2
aiffvocau


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\\")


看了我们今天的教程,学会这招后,你再也不用担心格式之间的转化问题,通过使用 pydub模块你能轻易地解决这些问题。如果本篇文章对你有帮助,请在文末点个在看支持一下哦。

往期推荐
1、Python 自动获取 Bing 壁纸
2、3个Pandas高频使用函数
3、程序员如何优雅地解决线上问题?
4、你这背景太假了,用AI自动合成,假吗?
5、基于NumPy实现随机梯度下降算法

点击关注公众号,阅读更多精彩内容
浏览 45
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报