import moviepy.editor as mp
import tkinter as tk
import tkinter.filedialog
import os
import sys
# “转换”按钮,FLV转换为MP3文件
def convert():
# 先设置源文件夹、目标文件夹为空。
source_address = ‘‘
target_address = ‘‘
if en1.get() == "":
t1.insert(‘end‘, ‘请选择源文件夹!\n‘)
t1.update()
# 移动滚动条,t1能显示最新内容。
t1.yview_moveto(1)
else:
source_address = f‘{en1.get()}‘
if en2.get() == "":
t1.insert(‘end‘, ‘请选择目标文件夹!\n‘)
t1.update()
# 移动滚动条,t1能显示最新内容。
t1.yview_moveto(1)
else:
target_address = f‘{en2.get()}‘
# 源文件夹、目标文件夹非空,获取文件并转换。
if source_address != ‘‘ and target_address != ‘‘:
# 获取指定目录下的所有文件
file_list = os.listdir(source_address)
for file_address in file_list:
# 获取文件的绝对路径(不包含后缀.flv)
file_name = file_address.split(‘.‘)[0]
# 拼接文件的绝对路径(dir+xxx.flv)
file_address = os.path.join(source_address, file_address)
# print(‘需要转换的文件>>>>>>>‘ + file_address)
t1.insert(‘end‘, f‘需要转换的文件>>>>>>>{file_address}\n‘)
t1.update()
# 移动滚动条,t1能显示最新内容。
t1.yview_moveto(1)
# 调用moviepy库的方法
clip = mp.AudioFileClip(file_address)
# 拼接转换后的文件路径
file_name = file_name + ‘.mp3‘
out_address = os.path.join(target_address, file_name)
# print(‘转换后的文件>>>>>>>>‘ + out_address)
t1.insert(‘end‘, f‘转换后的文件>>>>>>>>{out_address}\n‘)
t1.insert(‘end‘, f‘正在转换...........\n‘)
t1.update()
# 移动滚动条,t1能显示最新内容。
t1.yview_moveto(1)
# 转换FLV,同时保存为mp3音频文件
clip.write_audiofile(out_address)
t1.insert(‘end‘, f‘转换结束!\n‘)
t1.update()
# 移动滚动条,t1能显示最新内容。
t1.yview_moveto(1)
# 选择源文件夹
def select_s():
foldername = tkinter.filedialog.askdirectory()
if foldername != ‘‘:
en1.insert(0, foldername)
# # 选择目标文件夹
def select_t():
foldername = tkinter.filedialog.askdirectory()
if foldername != ‘‘:
en2.insert(0, foldername)
# “退出”按钮,退出程序
def exit_sys():
sys.exit()
if __name__ == ‘__main__‘:
fm_main = tk.Tk()
fm_main.title("FLV批量转换为MP3_v1.0")
# 获取显示区域的宽度
screenWidth = fm_main.winfo_screenwidth()
# 获取显示区域的高度
screenHeight = fm_main.winfo_screenheight()
# 设置窗口宽度
width = 586
# 设置窗口高度
height = 402
left = (screenWidth - width) / 2
top = (screenHeight - height) / 2
# 宽度x高度+x偏移+y偏移
# 在设定宽度和高度的基础上指定窗口相对于屏幕左上角的偏移位置
# fm_main.geometry(‘586x492‘)
fm_main.geometry(‘%dx%d+%d+%d‘ % (width, height, left, top))
fm_main.resizable(0, 0) # 设置窗口大小不可变
# v2 = tk.StringVar()
lb1 = tk.Label(fm_main, text="请输入要转换的FLV文件路径:").grid(row=0, column=0, sticky=tk.W)
# sticky=N + E + W,在水平、垂直方向上延伸,填满整个单元格
en1 = tk.Entry(fm_main)
en1.grid(row=0, column=1, sticky=tk.N + tk.E + tk.W)
lb2 = tk.Label(fm_main, text="请输入目标文件存放路径:")
lb2.grid(row=1, column=0, sticky=tk.W)
en2 = tk.Entry(fm_main)
en2.grid(row=1, column=1, sticky=tk.N + tk.E + tk.W)
b1 = tk.Button(fm_main, text=‘...‘, command=select_s)
b1.grid(row=0, column=2, sticky=tk.N + tk.E + tk.W)
b2 = tk.Button(fm_main, text=‘...‘, command=select_t)
b2.grid(row=1, column=2, sticky=tk.N + tk.E + tk.W)
b3 = tk.Button(fm_main, text=‘转换‘, command=convert)
b3.grid(row=4, column=0, sticky=tk.N + tk.E + tk.W)
b4 = tk.Button(fm_main, text=‘退出‘, command=exit_sys)
b4.grid(row=4, column=1, sticky=tk.N + tk.E + tk.W)
# columnspan=2,表示t1占用0,1二列
t1 = tk.Text(fm_main)
t1.grid(row=7, column=0, columnspan=2, sticky=tk.N + tk.E + tk.W)
# 创建滚动条
scroll = tk.Scrollbar(orient="vertical", command=t1.yview)
# 将滚动条填充
t1.config(yscrollcommand=scroll.set)
scroll.grid(row=7, column=2, sticky=tk.S + tk.W + tk.E + tk.N)
# 将滚动条与文本框关联
scroll[‘command‘] = t1.yview
# scroll.config(command=t1.yview)
# 将滚动条填充
t1.config(yscrollcommand=scroll.set)
fm_main.mainloop()
原文:https://www.cnblogs.com/lqsj2018/p/14363073.html