From 5065f32daf34543456626465bbb75c5ed49e9266 Mon Sep 17 00:00:00 2001 From: glowz <24627181@qq.com> Date: Sun, 4 May 2025 19:57:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0mp4=E8=BD=ACmp3?= =?UTF-8?q?=E7=9A=84=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 该脚本使用tkinter选择输入和输出目录,并利用moviepy库从mp4文件中提取音频并保存为mp3文件。此功能适用于批量处理视频文件中的音频提取。 --- mp4tomp3.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 mp4tomp3.py diff --git a/mp4tomp3.py b/mp4tomp3.py new file mode 100644 index 0000000..aeb9839 --- /dev/null +++ b/mp4tomp3.py @@ -0,0 +1,49 @@ +import tkinter as tk +from tkinter import filedialog +import os +import shutil +#from moviepy.editor import VideoFileClip +from moviepy import VideoFileClip +def select_directory(title): + root = tk.Tk() + root.withdraw() # 隐藏主窗口 + directory = filedialog.askdirectory(title=title) + return directory + +def extract_audio(input_dir, output_dir): + for root, dirs, files in os.walk(input_dir): + # 创建对应的输出子目录 + relative_path = os.path.relpath(root, input_dir) + output_sub_dir = os.path.join(output_dir, relative_path) + os.makedirs(output_sub_dir, exist_ok=True) + + for file in files: + if file.endswith((".mp4",".MP4",".mov",".MOV")): + input_file = os.path.join(root, file) + # 提取音频 + clip = VideoFileClip(input_file) + audio = clip.audio + # 保存音频文件,去掉视频文件扩展名 + audio_file_name = os.path.splitext(file)[0] + ".mp3" + output_audio_path = os.path.join(output_sub_dir, audio_file_name) + audio.write_audiofile(output_audio_path) + audio.close() + clip.close() + print(f"提取音频成功: {output_audio_path}") + +# 主程序 +if __name__ == "__main__": + # 选择输入目录 + input_dir = select_directory("选择输入目录") + if not input_dir: + print("未选择输入目录,退出程序。") + exit() + + # 选择输出目录 + output_dir = select_directory("选择输出目录") + if not output_dir: + print("未选择输出目录,退出程序。") + exit() + + # 提取音频 + extract_audio(input_dir, output_dir) \ No newline at end of file