49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
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) |