python实现音频文件格式转换(mp3,m4a,wav,wma,aac...)

news2025/1/15 5:14:46
  1. 方法介绍:
    在日常生活中,很多的音乐播放器下载的音频文件是特殊加密文件,在其他设备上无法正常播放,给我们带来诸多不便,为了正常使用我们可能会通过各类格式转换工具进行音频格式转换,劳民伤财!
    今天我们通过python语言进行音频文件格式转换,既可以学到技术,又可以给我们的工作生活带来便利!一举多得的好事!现在开打开编译器学起来吧!
  2. 准备工作:
    在开始之前我们需要下载几个python所需的方法库,音频格式转换也是依托这几个库中的方法:
    1)“下载地址: https://www.gyan.dev/ffmpeg/builds/”
    注意:下载ffmpeg;下载后解压到C盘根目录下!!!;将C:\ffmpeg\bin 添加到系统环境变量!!!
    不会添加系统环境变量的看这里——>(https://blog.csdn.net/zhan9le/article/details/145133484?sharetype=blogdetail&sharerId=145133484&sharerefer=PC&sharesource=zhan9le&sharefrom=mp_from_link)
"""
音频文件格式转换工具
"""
import os
from pydub import AudioSegment
from pathlib import Path
  1. 现在开始:(按照第二步准备工作做好后,直接复制即可)
def setup_ffmpeg():
    """设置 ffmpeg 路径"""
    try:
        # 设置 ffmpeg 路径
        ffmpeg_path = r"C:\ffmpeg\bin"  # 请确保这是你的 ffmpeg 安装路径
        if os.path.exists(ffmpeg_path):
            os.environ["PATH"] += os.pathsep + ffmpeg_path
        else:
            print("警告: 未找到 ffmpeg,请安装 ffmpeg 并设置正确的路径")
            print("下载地址: https://www.gyan.dev/ffmpeg/builds/")
            print("1. 下载 ffmpeg")
            print("2. 解压到 C:\\ffmpeg")
            print("3. 将 C:\\ffmpeg\\bin 添加到系统环境变量")
            return False
        return True
    except Exception as e:
        print(f"设置 ffmpeg 失败: {e}")
        return False
  1. 转换代码:(直接复制即可)

def convert_m4a_to_mp3(input_folder: str, output_folder: str):
    """
    将文件夹中的所有m4a文件转换为mp3
    
    Args:
        input_folder: 输入文件夹路径
        output_folder: 输出文件夹路径
    """
    try:
        # 检查 ffmpeg
        if not setup_ffmpeg():
            return
            
        # 确保输出目录存在
        if not os.path.exists(output_folder):
            os.makedirs(output_folder)
            
        # 获取所有m4a文件
        m4a_files = list(Path(input_folder).glob('*.m4a'))
        total = len(m4a_files)
        
        print(f"找到 {total} 个m4a文件")
        
        # 转换每个文件
        for i, m4a_path in enumerate(m4a_files, 1):
            try:
                # 检查源文件是否存在
                if not os.path.exists(m4a_path):
                    print(f"[{i}/{total}] {m4a_path.name} -> 源文件不存在,跳过")
                    continue
                    
                # 构建输出文件路径
                mp3_path = os.path.join(output_folder, f"{m4a_path.stem}.mp3")
                
                # 如果mp3文件已存在,跳过转换
                if os.path.exists(mp3_path):
                    print(f"[{i}/{total}] {m4a_path.name} -> 已存在,跳过")
                    continue
                
                print(f"[{i}/{total}] 正在转换 {m4a_path.name}...")
                
                # 使用 ffmpeg 直接转换
                cmd = f'ffmpeg -i "{m4a_path}" -acodec libmp3lame -ab 320k "{mp3_path}"'
                result = os.system(cmd)
                
                if result == 0:
                    print(f"[{i}/{total}] {m4a_path.name} -> 转换成功")
                else:
                    print(f"[{i}/{total}] {m4a_path.name} -> 转换失败")
                
            except Exception as e:
                print(f"[{i}/{total}] {m4a_path.name} -> 转换失败: {e}")
                continue
                
        print("\n转换完成!")
        print(f"输出目录: {output_folder}")
        
    except Exception as e:
        print(f"转换过程出错: {e}")
  1. 转换代码:(修改文件路径后直接复制即可)
def main():
    # 设置输入和输出文件夹
    input_folder = r"这里填当前需要转换的文件路径"
    output_folder = r"这里填转换的文件存放路径"
    
    # 开始转换
    convert_m4a_to_mp3(input_folder, output_folder)
 
if __name__ == "__main__":
	main()

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

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

相关文章

vue2制作长方形容器,正方形网格散点图,并且等比缩放拖动

需求:有个长方形的容器,但是需要正方形的网格线,网格线是等比缩放的并且可以无线拖动的,并且添加自适应缩放和动态切换,工具是plotly.js,已完成功能如下 1.正方形网格 2.散点分组 3.自定义悬浮框的数据 4.根据窗口大小…

0基础跟德姆(dom)一起学AI 自然语言处理13-注意力机制介绍2

1 注意力机制规则 它需要三个指定的输入Q(query), K(key), V(value), 然后通过计算公式得到注意力的结果, 这个结果代表query在key和value作用下的注意力表示. 当输入的QKV时, 称作自注意力计算规则;当Q、K、V不相等时称为一般注意力计算规则 例子:seq2…

慧集通(DataLinkX)iPaaS集成平台-系统管理之UI库管理、流程模板

UI库管理 UI库管理分为平台级和自建两种,其中平台级就是慧集通平台自己内置的一些ui库所有客户均可调用,自建则是平台支持使用者自己根据规则自己新增对应的UI库。具体界面如下: 自建UI库新增界面: 注:平台级UI库不支…

通过一个算法的设计来了解栈的一些应用

目录 1.前言 2.步骤 3.代码实现 4.测试 5.运行结果 6.一些思考 7.一些应用示例 1.前言 掌握堆栈的基本原理 掌握堆栈的存储结构 掌握堆栈的进栈、出栈; 判断栈空的实现方法 掌握应用堆栈实现括号匹配的原理和实现方法; 熟悉python语言编程 熟练…

USB 驱动开发 --- Gadget 驱动框架梳理(一)

本文由 Linux 内核文档翻译与总结而来,个人学习笔记仅供参考。 Gadget 框架 在 USB 协议交互过程中,角色定义: the device driver is the master (or “client driver”) Linux 内核中称为 HCD(Host Controller Driver),负责与 …

字符串算法篇——字里乾坤,算法织梦,解构字符串的艺术(下)

文章目录 前言第一章:最长公共前缀1.1 题目链接:https://leetcode.cn/problems/longest-common-prefix/description/1.2 题目分析:1.3 思路讲解:1.4 代码实现: 第二章:最长回文子串2.1 题目链接&#xff1a…

计算机网络 笔记 数据链路层3(局域网,广域网,网桥,交换机)

局域网: LAN:在某一区域内由多台计算机互联成的计算机组,使用广播信道 特点: 覆盖范围有限:通常局限在几千米范围内,比如一栋办公楼、一个校园或一个工厂等相对较小的地理区域。 数据传输速率高:一般能达到 10Mbps…

istio-proxy oom问题排查步骤

1. 查看cluster数量 cluster数量太多会导致istio-proxy占用比较大的内存,此时需检查是否dr资源的host设置有配置为* 2. 查看链路数据采样率 若采样率设置过高,在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。 检查iop中…

fast-crud select下拉框 实现多选功能及下拉框数据动态获取(通过接口获取)

教程 fast-crud select示例配置需求:需求比较复杂 1. 下拉框选项需要通过后端接口获取 2. 实现多选功能 由于这个前端框架使用逻辑比较复杂我也是第一次使用,所以只记录核心问题 环境:vue3,typescript,fast-crud ,elementPlus 效果 代码 // crud.tsx文件(/.ts也行 js应…

Apache JMeter 压力测试使用说明

文章目录 一、 安装步骤步骤一 下载相关的包步骤二 安装 Jmeter步骤三 设置 Jmeter 工具语言类型为中文 二、使用工具2.1 创建测试任务步骤一 创建线程组步骤二 创建 HTTP 请求 2.2 配置 HTTP 默认参数添加 HTTP消息头管理器HTTP请求默认值 2.3 添加 查看结果监听器2.4 查看结果…

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS(Domain Name System)是互联网的基础技术之一,它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址,使得用户可以通过简单易记的域名来访…

本地服务器Docker搭建个人云音乐平台Splayer并实现远程访问告别烦人广告

前言 大家好!今天我要给大家分享的是如何在Ubuntu上用Docker快速搭建高颜值无广告的某抑云音乐播放器Splayer的详细流程,并且结合cpolar内网穿透工具实现远程访问。如果你是音乐爱好者,经常需要在外办公或旅行,这个教程绝对能让你…

黑马linux入门笔记(01)初始Linux Linux基础命令 用户和权限 实用操作

B站 黑马程序员 的视频 BV1n84y1i7td 黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等 增强自控力 冥想慢呼吸绿色锻炼充分休息减少决策次数优先做重要的事情(早晨)融入强自控群控…

小程序组件 —— 31 事件系统 - 事件绑定和事件对象

小程序中绑定事件和网页开发中绑定事件几乎一致,只不过在小程序不能通过 on 的方式绑定事件,也没有 click 等事件,小程序中绑定事件使用 bind 方法,click 事件也需要使用 tap 事件来进行代替,绑定事件的方式有两种&…

UE5 使用内置组件进行网格切割

UE引擎非常强大,直接内置了网格切割功能并封装为蓝图节点,这项功能在UE4中就存在,并且无需使用Chaos等模块。那么就来学习下如何使用内置组件实现网格切割。 1.配置测试用StaticMesh 对于被切割的模型,需要配置一些参数。以UE5…

ue5 1.平A,两段连击蒙太奇。鼠标点一下,就放2段动画。2,动画混合即融合,边跑边挥剑,3,动画通知,动画到某一帧,把控制权交给蓝图。就执行蓝图节点

新建文件夹 创建一个蒙太奇MA_Melee 找到c_slow 调节一下速度 把D_slow拖上去 中间加一个片段 哎呀呀,写错了,我想写2 把这个标记拖过来,点击默认default 弄第二个片段 就会自己变成这个样子 把2这个标记拖到中间 鼠标左键&a…

《机器学习》之K-means聚类

目录 一、简介 二、K-means聚类实现步骤 1、初始化数据点、确定K值 2、通过距离分配数据点 3、更新簇中心 4、 迭代更新 三、聚类效果评价方式 1、轮廓系数的定义 2、整体轮廓系数 3、使用场景 4、优点 5、缺点 6、代码实现方法 四、K-means聚类代码实现 1、API接…

Wireshark抓包教程(2024最新版个人笔记)

改内容是个人的学习笔记 Wireshark抓包教程(2024最新版)_哔哩哔哩_bilibili 该课程笔记1-16 wireshark基础 什么是抓包工具:用来抓取数据包的一个软件 wireshark的功能:用来网络故障排查;用来学习网络技术 wireshark下…

Web开发(一)HTML5

Web开发(一)HTML5 写在前面 参考黑马程序员前端Web教程做的笔记,主要是想后面自己搭建网页玩。 这部分是前端HTML5CSS3移动web视频教程的HTML5部分。主要涉及到HTML的基础语法。 HTML基础 标签定义 HTML定义 HTML(HyperText Markup Lan…

RabbitMQ 的工作模式

目录 工作模式 Simple(简单模式) Work Queue(工作队列) Publish/Subscribe(发布/订阅) Exchange(交换机) Routing(路由模式) Topics(通配…