当前位置: 首页 > news >正文

如何提取mdd字典中音频文件并转化为mp3

平时,我们都会使用goldendict或者mdict等字典软件,通过加载一些字典可以轻松查阅读带图片、音频和文字的单词详情,帮助我们更好地学习英语、翻译文章等。但有时,我们想把字典文件中的音频提取出来,作为一个音频库来本地使用,那么如何实现这个过程呢。

一、问题分析

为了提取mp3,首先我们要使用把mdx文件解包,然后提取出后缀为spx的文件,再通过FFmpeg把spx文件批量转化为mp3格式,为了实现批量的转换,我们还需要调用Python来执行这个操作。

二、实现过程

1. 我们要下载mdx的解包工具,叫MdxExport.exe,这个软件很小,只有64kb。

导出mdd文件中的资源

2. 点击开始后,我们就可以把mdx文件中的图片和spx文件导出到OALD7_FULL这个文件夹下面

导出spx文件

3. 接下来,我们下载ffmpeg.exe这个小工具到当前页面,然后通过Python编程来批量读取文件夹中的spx文件,并存入到7000这个目录里面,详细代码如下:

import os
import subprocess
import logging# 配置日志
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s')def convert_spx_to_mp3(input_file, output_file, bitrate="192k"):"""使用ffmpeg转换单个SPX文件为MP3"""try:# 检查输入文件是否存在if not os.path.exists(input_file):raise FileNotFoundError(f"输入文件不存在: {input_file}")# 创建输出目录(如果不存在)os.makedirs(os.path.dirname(output_file), exist_ok=True)# 使用ffmpeg转换音频command = ['ffmpeg','-i', input_file,'-ab', bitrate,'-ac', '2',  # 立体声'-ar', '44100',  # 采样率'-y',  # 覆盖已存在文件output_file]# 运行命令并捕获输出result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,text=True)logging.info(f"成功转换: {input_file} → {output_file}")return Trueexcept subprocess.CalledProcessError as e:logging.error(f"ffmpeg转换失败: {input_file} | 错误: {e.stderr}")return Falseexcept Exception as e:logging.error(f"转换失败: {input_file} | 错误: {str(e)}")return Falsedef batch_convert_spx_to_mp3(input_dir, output_dir, bitrate="192k"):"""批量转换目录下的所有SPX文件"""# 验证输入目录if not os.path.isdir(input_dir):logging.error(f"输入目录无效: {input_dir}")return# 统计信息total_files = 0success_files = 0# 遍历目录for root, _, files in os.walk(input_dir):for file in files:if file.lower().endswith(".spx"):total_files += 1# 构造完整路径input_path = os.path.join(root, file)# 保持原始目录结构relative_path = os.path.relpath(root, input_dir)output_subdir = os.path.join(output_dir, relative_path)# 确保输出文件名正确output_filename = os.path.splitext(file)[0] + ".mp3"output_path = os.path.join(output_subdir, output_filename)# 执行转换if convert_spx_to_mp3(input_path, output_path, bitrate):success_files += 1# 输出统计信息logging.info(f"转换完成! 总计: {total_files}, 成功: {success_files}, 失败: {total_files - success_files}")if __name__ == "__main__":# 配置路径INPUT_DIR = "OALD7_FULL"    # 原始SPX文件目录OUTPUT_DIR = "7000"         # 输出MP3目录BITRATE = "192k"            # MP3比特率# 执行批量转换batch_convert_spx_to_mp3(INPUT_DIR, OUTPUT_DIR, BITRATE)

如果我们想使转化后的音频个头小点,就把bitrate改成96k,这样占据的空间会更小点。使用时,可以把INPUT_DIR和OUTPUT_DIR修改一下,并确保目录均是可用的。

转化成的mp3

4. 生成的mp3名称是乱的,我们还需要对其进行重命名,经过观察,我们可以遍历7000这个文件夹下面的mp3,然后通过split的方法,按照"_"切分文件名,并保存就可以了。最终的代码如下:

from pathlib import Path
path = Path("7000")
files = path.glob("*.mp3")
for file in files:file.replace(path.joinpath(file.parts[1].split("_")[1]+".mp3"))

上面代码中,我们先遍历指定文件夹,然后切分路径,再按照“_”分割,获得mp3文件。接着用file.replace()直接在原文件名上重命名。

三、学后总结

1. 本次提取字典中音频综合运用Python和大语言模型来解决现实问题,同时还向群友进行了咨询,给我很大启发。

2. 本次转化过程发挥了Python在格式转化和批量重命名的作用,进一步简化了流程,彰显出Python在批量音频文件处理中的巨大作用。

3. 如果你想学习Python,就不妨读一读这本书,或许可以帮助你步步为赢,掌握Python技巧。

http://www.lqws.cn/news/554329.html

相关文章:

  • 基于社区电商场景的Redis缓存架构实战02-社区电商项目实战
  • 嵌入式单片机中SPI串行外设接口控制与详解
  • cannot import name ‘TextKwargs‘ from ‘transformers.processing_utils‘
  • git使用详解和示例
  • 蓝凌流程引擎流程图格式化实现原理全解
  • 湖北理元理律师事务所:债务优化中的法律理性与人文温度
  • Blender速成班-知识补充
  • 13-StringBuilder类的使用
  • 如何利用企业内部数据评测大模型的实际表现?
  • SpringBoot3.x整合Knife4j接口文档
  • STM32HAL 旋转编码器教程
  • ASProxy64.dll导致jetbrains家的IDE都无法打开。
  • navigation2学习笔记
  • 前后端分离实战2----前端
  • Push-T, AloHa, Rlbench三个仿真环境信息
  • c# sugersql 获取子表数据排序
  • 大一C语言期末选择题和填空题题库
  • 求职招聘小程序源码招聘小程序搭建招聘小程序定制开发
  • Kioptrix Level1
  • 第十节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 菜单管理(下)
  • 从台式电脑硬件架构看前后端分离开发模式
  • 数字孪生技术引领UI前端设计新革命:实时交互与模拟预测
  • 【Elasticsearch】全文检索 组合检索
  • 基于多径信道的分集接收技术性能优化与仿真分析
  • 单端反激变换器MATLAB仿真设计方案
  • 开源AI大模型驱动下的“信息找人“范式变革:AI智能名片与S2B2C商城小程序源码的技术重构
  • vue3中实现高德地图地址搜索自动提示(附源码)
  • WHERE 子句中使用子查询:深度解析与最佳实践
  • 【论文阅读笔记】知网SCI——基于主成分分析的空间外差干涉数据校正研究
  • 【JavaSE】Comparable和Comparator接口