63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
from pydub import AudioSegment
|
||
import os
|
||
|
||
# 使用相对路径
|
||
AudioSegment.converter = "ffmpeg.exe"
|
||
AudioSegment.ffmpeg = "ffmpeg.exe"
|
||
AudioSegment.ffprobe = "ffprobe.exe"
|
||
|
||
# 验证文件是否存在
|
||
ffmpeg_path = os.path.join(os.path.dirname(__file__), "ffmpeg.exe")
|
||
ffprobe_path = os.path.join(os.path.dirname(__file__), "ffprobe.exe")
|
||
|
||
if not os.path.exists(ffmpeg_path):
|
||
raise FileNotFoundError(f"请将ffmpeg.exe放在项目目录中: {ffmpeg_path}")
|
||
|
||
if not os.path.exists(ffprobe_path):
|
||
raise FileNotFoundError(f"请将ffprobe.exe放在项目目录中: {ffprobe_path}")
|
||
|
||
|
||
def merge_mp3_files(input_directory, output_file):
|
||
"""
|
||
将指定目录下的所有MP3文件合并成一个MP3文件
|
||
|
||
Args:
|
||
input_directory (str): 包含MP3文件的目录路径
|
||
output_file (str): 输出的合并后MP3文件路径
|
||
"""
|
||
# 获取目录下所有mp3文件
|
||
mp3_files = []
|
||
for file_name in os.listdir(input_directory):
|
||
if file_name.lower().endswith('.mp3'):
|
||
mp3_files.append(os.path.join(input_directory, file_name))
|
||
|
||
# 按文件名字母顺序排序,确保合并顺序一致
|
||
mp3_files.sort()
|
||
|
||
if not mp3_files:
|
||
print("目录中没有找到MP3文件")
|
||
return
|
||
|
||
print(f"找到 {len(mp3_files)} 个MP3文件,开始合并...")
|
||
|
||
# 加载第一个音频文件
|
||
combined = AudioSegment.from_mp3(mp3_files[0])
|
||
print(f"已加载: {os.path.basename(mp3_files[0])}")
|
||
|
||
# 依次合并其余的音频文件
|
||
for file_path in mp3_files[1:]:
|
||
audio = AudioSegment.from_mp3(file_path)
|
||
combined += audio # 使用 += 操作符合并音频
|
||
print(f"已合并: {os.path.basename(file_path)}")
|
||
|
||
# 导出合并后的音频文件
|
||
combined.export(output_file, format="mp3")
|
||
print(f"所有文件已合并完成,输出文件: {output_file}")
|
||
|
||
|
||
# 使用示例
|
||
if __name__ == "__main__":
|
||
input_dir = "./马保国语音包"
|
||
output_file = "./马保国语音包_合并.mp3"
|
||
merge_mp3_files(input_dir, output_file)
|