003、FLV视频转MP3音频文件
003、FLV视频转MP3音频文件
问题描述:
网上下载了一些FLV视频文件,想转换为MP3音频文件;方便播放。
为方便使用,用tkinter图形化界实现。程序打包后,可以分发共享。
程序代码如下:
1 import moviepy.editor as mp 2 import tkinter as tk 3 import tkinter.filedialog 4 import os 5 import sys 6 7 8 # “转换”按钮,FLV转换为MP3文件 9 def convert(): 10 # 先设置源文件夹、目标文件夹为空。 11 source_address = '' 12 target_address = '' 13 if en1.get() == "": 14 t1.insert('end', '请选择源文件夹!\n') 15 t1.update() 16 # 移动滚动条,t1能显示最新内容。 17 t1.yview_moveto(1) 18 else: 19 source_address = f'{en1.get()}' 20 if en2.get() == "": 21 t1.insert('end', '请选择目标文件夹!\n') 22 t1.update() 23 # 移动滚动条,t1能显示最新内容。 24 t1.yview_moveto(1) 25 else: 26 target_address = f'{en2.get()}' 27 28 # 源文件夹、目标文件夹非空,获取文件并转换。 29 if source_address != '' and target_address != '': 30 # 获取指定目录下的所有文件 31 file_list = os.listdir(source_address) 32 for file_address in file_list: 33 # 获取文件的绝对路径(不包含后缀.flv) 34 file_name = file_address.split('.')[0] 35 # 拼接文件的绝对路径(dir+xxx.flv) 36 file_address = os.path.join(source_address, file_address) 37 # print('需要转换的文件>>>>>>>' + file_address) 38 t1.insert('end', f'需要转换的文件>>>>>>>{file_address}\n') 39 t1.update() 40 # 移动滚动条,t1能显示最新内容。 41 t1.yview_moveto(1) 42 # 调用moviepy库的方法 43 clip = mp.AudioFileClip(file_address) 44 # 拼接转换后的文件路径 45 file_name = file_name + '.mp3' 46 out_address = os.path.join(target_address, file_name) 47 # print('转换后的文件>>>>>>>>' + out_address) 48 t1.insert('end', f'转换后的文件>>>>>>>>{out_address}\n') 49 t1.insert('end', f'正在转换...........\n') 50 t1.update() 51 # 移动滚动条,t1能显示最新内容。 52 t1.yview_moveto(1) 53 # 转换FLV,同时保存为mp3音频文件 54 clip.write_audiofile(out_address) 55 56 t1.insert('end', f'转换结束!\n') 57 t1.update() 58 # 移动滚动条,t1能显示最新内容。 59 t1.yview_moveto(1) 60 61 62 # 选择源文件夹 63 def select_s(): 64 foldername = tkinter.filedialog.askdirectory() 65 if foldername != '': 66 en1.insert(0, foldername) 67 68 69 # # 选择目标文件夹 70 def select_t(): 71 foldername = tkinter.filedialog.askdirectory() 72 if foldername != '': 73 en2.insert(0, foldername) 74 75 76 # “退出”按钮,退出程序 77 def exit_sys(): 78 sys.exit() 79 80 81 if __name__ == '__main__': 82 fm_main = tk.Tk() 83 fm_main.title("FLV批量转换为MP3_v1.0") 84 # 获取显示区域的宽度 85 screenWidth = fm_main.winfo_screenwidth() 86 # 获取显示区域的高度 87 screenHeight = fm_main.winfo_screenheight() 88 # 设置窗口宽度 89 width = 586 90 # 设置窗口高度 91 height = 402 92 left = (screenWidth - width) / 2 93 top = (screenHeight - height) / 2 94 # 宽度x高度+x偏移+y偏移 95 # 在设定宽度和高度的基础上指定窗口相对于屏幕左上角的偏移位置 96 # fm_main.geometry('586x492') 97 fm_main.geometry('%dx%d+%d+%d' % (width, height, left, top)) 98 fm_main.resizable(0, 0) # 设置窗口大小不可变 99 100 # v2 = tk.StringVar() 101 lb1 = tk.Label(fm_main, text="请输入要转换的FLV文件路径:").grid(row=0, column=0, sticky=tk.W) 102 # sticky=N + E + W,在水平、垂直方向上延伸,填满整个单元格 103 en1 = tk.Entry(fm_main) 104 en1.grid(row=0, column=1, sticky=tk.N + tk.E + tk.W) 105 lb2 = tk.Label(fm_main, text="请输入目标文件存放路径:") 106 lb2.grid(row=1, column=0, sticky=tk.W) 107 en2 = tk.Entry(fm_main) 108 en2.grid(row=1, column=1, sticky=tk.N + tk.E + tk.W) 109 110 b1 = tk.Button(fm_main, text='...', command=select_s) 111 b1.grid(row=0, column=2, sticky=tk.N + tk.E + tk.W) 112 b2 = tk.Button(fm_main, text='...', command=select_t) 113 b2.grid(row=1, column=2, sticky=tk.N + tk.E + tk.W) 114 115 b3 = tk.Button(fm_main, text='转换', command=convert) 116 b3.grid(row=4, column=0, sticky=tk.N + tk.E + tk.W) 117 b4 = tk.Button(fm_main, text='退出', command=exit_sys) 118 b4.grid(row=4, column=1, sticky=tk.N + tk.E + tk.W) 119 120 # columnspan=2,表示t1占用0,1二列 121 t1 = tk.Text(fm_main) 122 t1.grid(row=7, column=0, columnspan=2, sticky=tk.N + tk.E + tk.W) 123 124 # 创建滚动条 125 scroll = tk.Scrollbar(orient="vertical", command=t1.yview) 126 127 # 将滚动条填充 128 t1.config(yscrollcommand=scroll.set) 129 scroll.grid(row=7, column=2, sticky=tk.S + tk.W + tk.E + tk.N) 130 131 # 将滚动条与文本框关联 132 scroll['command'] = t1.yview 133 # scroll.config(command=t1.yview) 134 # 将滚动条填充 135 t1.config(yscrollcommand=scroll.set) 136 137 fm_main.mainloop()
小学生C++