如何提取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技巧。