无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 282|回复: 14
打印 上一主题 下一主题

[求助] 有没有番茄畅听下载的音频转换成mp3的方法或软件。谢谢

[复制链接]
跳转到指定楼层
1#
2#
发表于 9 小时前 | 只看该作者
直接修改后缀名应该可行,把.m4a名换成.mp3,如果不能播放,还是要借助转换工具,Movavi可以支持批量转换
回复

使用道具 举报

3#
发表于 9 小时前 | 只看该作者
应该有直接能播.ma4的播放软件
回复

使用道具 举报

4#
发表于 8 小时前 | 只看该作者
搜下好象有 但没用过
回复

使用道具 举报

5#
发表于 8 小时前 | 只看该作者
回复

使用道具 举报

6#
发表于 6 小时前 | 只看该作者
本帖最后由 jtjt68 于 2025-7-14 16:19 编辑
  1. import os
  2. import tkinter as tk
  3. from tkinter import filedialog, scrolledtext, messagebox
  4. import subprocess
  5. import threading
  6. import time

  7. class M4AToMP3Converter:
  8.     def __init__(self, root):
  9.         self.root = root
  10.         self.root.title("M4A转MP3转换器")
  11.         self.root.geometry("600x450")
  12.         self.root.resizable(False, False)
  13.         
  14.         # 设置中文字体支持
  15.         self.font = ("SimHei", 10)
  16.         
  17.         # 创建源文件夹选择区域
  18.         src_frame = tk.Frame(root, padx=10, pady=5)
  19.         src_frame.pack(fill=tk.X)
  20.         
  21.         tk.Label(src_frame, text="源文件夹:", font=self.font).pack(side=tk.LEFT)
  22.         
  23.         self.src_path = tk.StringVar()
  24.         src_entry = tk.Entry(src_frame, textvariable=self.src_path, width=40, font=self.font)
  25.         src_entry.pack(side=tk.LEFT, padx=5)
  26.         
  27.         tk.Button(src_frame, text="浏览", command=self.browse_src_folder, font=self.font).pack(side=tk.LEFT)
  28.         
  29.         # 创建目标文件夹选择区域
  30.         dest_frame = tk.Frame(root, padx=10, pady=5)
  31.         dest_frame.pack(fill=tk.X)
  32.         
  33.         tk.Label(dest_frame, text="目标文件夹:", font=self.font).pack(side=tk.LEFT)
  34.         
  35.         self.dest_path = tk.StringVar()
  36.         dest_entry = tk.Entry(dest_frame, textvariable=self.dest_path, width=40, font=self.font)
  37.         dest_entry.pack(side=tk.LEFT, padx=5)
  38.         
  39.         tk.Button(dest_frame, text="浏览", command=self.browse_dest_folder, font=self.font).pack(side=tk.LEFT)
  40.         
  41.         # 创建转换按钮
  42.         btn_frame = tk.Frame(root, padx=10, pady=10)
  43.         btn_frame.pack(fill=tk.X)
  44.         
  45.         self.convert_btn = tk.Button(btn_frame, text="开始转换", command=self.start_conversion,
  46.                                     font=self.font, bg="#4CAF50", fg="white", height=1)
  47.         self.convert_btn.pack(fill=tk.X)
  48.         
  49.         # 创建日志区域
  50.         log_frame = tk.Frame(root, padx=10, pady=5)
  51.         log_frame.pack(fill=tk.BOTH, expand=True)
  52.         
  53.         tk.Label(log_frame, text="转换日志:", font=self.font).pack(anchor=tk.W)
  54.         
  55.         self.log_text = scrolledtext.ScrolledText(log_frame, wrap=tk.WORD, width=70, height=15, font=self.font)
  56.         self.log_text.pack(fill=tk.BOTH, expand=True, pady=5)
  57.         
  58.         # 状态变量
  59.         self.is_converting = False
  60.         
  61.         # 初始化日志
  62.         self.log("欢迎使用M4A转MP3转换器!")
  63.         self.log("请选择源文件夹和目标文件夹,然后点击开始转换按钮。")
  64.    
  65.     def log(self, message):
  66.         """添加日志到日志框"""
  67.         timestamp = time.strftime("%H:%M:%S")
  68.         self.log_text.insert(tk.END, f"[{timestamp}] {message}\n")
  69.         self.log_text.see(tk.END)
  70.    
  71.     def browse_src_folder(self):
  72.         """浏览并选择源文件夹"""
  73.         folder = filedialog.askdirectory(title="选择源文件夹")
  74.         if folder:
  75.             self.src_path.set(folder)
  76.             self.log(f"已选择源文件夹: {folder}")
  77.    
  78.     def browse_dest_folder(self):
  79.         """浏览并选择目标文件夹"""
  80.         folder = filedialog.askdirectory(title="选择目标文件夹")
  81.         if folder:
  82.             self.dest_path.set(folder)
  83.             self.log(f"已选择目标文件夹: {folder}")
  84.    
  85.     def start_conversion(self):
  86.         """开始转换过程"""
  87.         if self.is_converting:
  88.             self.log("正在进行转换,请等待当前任务完成...")
  89.             return
  90.         
  91.         src_folder = self.src_path.get()
  92.         dest_folder = self.dest_path.get()
  93.         
  94.         if not src_folder or not dest_folder:
  95.             messagebox.showerror("错误", "请选择源文件夹和目标文件夹!")
  96.             return
  97.         
  98.         if not os.path.exists(src_folder):
  99.             messagebox.showerror("错误", "源文件夹不存在!")
  100.             return
  101.         
  102.         if not os.path.exists(dest_folder):
  103.             try:
  104.                 os.makedirs(dest_folder)
  105.                 self.log(f"已创建目标文件夹: {dest_folder}")
  106.             except:
  107.                 messagebox.showerror("错误", "无法创建目标文件夹!")
  108.                 return
  109.         
  110.         # 获取所有m4a文件
  111.         m4a_files = [f for f in os.listdir(src_folder) if f.lower().endswith('.m4a')]
  112.         
  113.         if not m4a_files:
  114.             messagebox.showinfo("信息", "源文件夹中未找到M4A文件!")
  115.             return
  116.         
  117.         self.log(f"找到 {len(m4a_files)} 个M4A文件,开始转换...")
  118.         
  119.         # 禁用按钮
  120.         self.convert_btn.config(state=tk.DISABLED, text="转换中...")
  121.         self.is_converting = True
  122.         
  123.         # 在新线程中执行转换,避免GUI冻结
  124.         threading.Thread(target=self.convert_files, args=(m4a_files, src_folder, dest_folder), daemon=True).start()
  125.    
  126.     def convert_files(self, m4a_files, src_folder, dest_folder):
  127.         """执行文件转换"""
  128.         success_count = 0
  129.         fail_count = 0
  130.         
  131.         for i, filename in enumerate(m4a_files, 1):
  132.             try:
  133.                 self.log(f"正在转换文件 ({i}/{len(m4a_files)}): {filename}")
  134.                
  135.                 src_file = os.path.join(src_folder, filename)
  136.                 mp3_filename = os.path.splitext(filename)[0] + '.mp3'
  137.                 dest_file = os.path.join(dest_folder, mp3_filename)
  138.                
  139.                 # 使用ffmpeg进行转换
  140.                 # -i: 输入文件
  141.                 # -vn: 不包含视频
  142.                 # -acodec libmp3lame: 使用mp3编码
  143.                 # -q:a 2: 音频质量,2是比较好的质量
  144.                 # -y: 覆盖已存在的文件
  145.                 cmd = [
  146.                     'ffmpeg',
  147.                     '-i', src_file,
  148.                     '-vn',
  149.                     '-acodec', 'libmp3lame',
  150.                     '-q:a', '2',
  151.                     '-y',
  152.                     dest_file
  153.                 ]
  154.                
  155.                 result = subprocess.run(cmd, capture_output=True, text=True)
  156.                
  157.                 if result.returncode != 0:
  158.                     self.log(f"转换失败: {filename}")
  159.                     self.log(f"错误信息: {result.stderr}")
  160.                     fail_count += 1
  161.                 else:
  162.                     self.log(f"成功转换: {mp3_filename}")
  163.                     success_count += 1
  164.                     
  165.             except Exception as e:
  166.                 self.log(f"处理文件时出错: {filename}")
  167.                 self.log(f"错误信息: {str(e)}")
  168.                 fail_count += 1
  169.         
  170.         # 转换完成,更新UI
  171.         self.root.after(0, self.conversion_complete, success_count, fail_count)
  172.    
  173.     def conversion_complete(self, success_count, fail_count):
  174.         """转换完成后的处理"""
  175.         total_count = success_count + fail_count
  176.         self.log(f"转换完成!成功: {success_count}, 失败: {fail_count}, 总计: {total_count} 个文件")
  177.         
  178.         # 启用按钮
  179.         self.convert_btn.config(state=tk.NORMAL, text="开始转换")
  180.         self.is_converting = False
  181.         
  182.         # 显示完成消息
  183.         messagebox.showinfo("完成", f"转换完成!\n成功: {success_count}\n失败: {fail_count}\n总计: {total_count} 个文件")

  184. if __name__ == "__main__":
  185.     root = tk.Tk()
  186.     app = M4AToMP3Converter(root)
  187.     root.mainloop()   
复制代码
用AI写了个,能用,要把[color=rgba(0, 0, 0, 0.85)]FFmpeg放在同一文件夹里

wechat_2025-07-14_161446_836.png (46.1 KB, 下载次数: 0)

截图

截图

点评

现在的AI不得了,要把程序员干得没饭吃了。 打包好的程序:https://my-file.cn/s/adb0TQ  详情 回复 发表于 3 小时前
回复

使用道具 举报

7#
发表于 3 小时前 | 只看该作者
ffmpeg -i input.m4a -acodec libmp3lame output.mp3
回复

使用道具 举报

8#
发表于 3 小时前 | 只看该作者
jtjt68 发表于 2025-7-14 16:12
用AI写了个,能用,要把FFmpeg放在同一文件夹里

现在的AI不得了,要把程序员干得没饭吃了。

打包好的程序:https://my-file.cn/s/adb0TQ

点评

谢谢分享打包成果  详情 回复 发表于 1 小时前
回复

使用道具 举报

9#
发表于 3 小时前 | 只看该作者
国内外音频全格式转换工具有不少 可以试一试

点评

能推荐几个吗 ?? 有的格式转换 动辄300 400 兆的 太吓人了  详情 回复 发表于 1 小时前
回复

使用道具 举报

10#
发表于 1 小时前 | 只看该作者
wn168cn@163.com 发表于 2025-7-14 19:24
国内外音频全格式转换工具有不少 可以试一试

能推荐几个吗 ?? 有的格式转换  动辄300 400 兆的 太吓人了

点评

风云 迅捷 格式工厂 goldwave 等 找较新的版本试试看  详情 回复 发表于 1 小时前
回复

使用道具 举报

11#
发表于 1 小时前 | 只看该作者
格式工厂
回复

使用道具 举报

12#
发表于 1 小时前 | 只看该作者
518hl 发表于 2025-7-14 20:40
能推荐几个吗 ?? 有的格式转换  动辄300 400 兆的 太吓人了

风云 迅捷 格式工厂 goldwave 等 找较新的版本试试看

点评

goldwave 体格很小 只有几M 打开文件 另存为MP3即可 很方便  详情 回复 发表于 1 小时前
回复

使用道具 举报

13#
发表于 1 小时前 | 只看该作者
ddzyhhh 发表于 2025-7-14 18:49
现在的AI不得了,要把程序员干得没饭吃了。

打包好的程序:https://my-file.cn/s/adb0TQ

谢谢分享打包成果
回复

使用道具 举报

14#
发表于 1 小时前 | 只看该作者
wn168cn@163.com 发表于 2025-7-14 21:04
风云 迅捷 格式工厂 goldwave 等 找较新的版本试试看

goldwave 体格很小 只有几M 打开文件 另存为MP3即可 很方便
回复

使用道具 举报

15#
发表于 1 小时前 | 只看该作者
本帖最后由 siaoyu 于 2025-7-14 21:19 编辑

http://bbs.wuyou.net/forum.php?m ... 43375&extra=&page=1

Moo0官网  列表里很多




图片发不了,链接也发不了,垃圾
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-7-14 22:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表