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()

 

posted @ 2021-02-02 17:07  lqsj2018  阅读(240)  评论(0编辑  收藏  举报