现如今好多音乐网站的歌曲需要会员才能听,再次分享一个提取mv中的音频文件的方法:
1.首先从哔哩哔哩中下载对应的视频文件:
https://www.bilibili.com
https://bilibili.iiilab.com/
2.通过 moviepy模块中的editor进行音频提取:
运行如下代码即可:
import tkinter as tk
from tkinter.filedialog import askopenfilename
import moviepy.editor as mpy
class App(object):
def __init__(self, init_window_name):
self.file_input_dirs = None # 存放文件地址变量
self.init_window_name = init_window_name
self.init_window_name.title("Mp4中提取Mp3") # 设置窗口标题
# Create a blank dictionary
self.answers = {}
linePad = 7
font = ('华文彩云', 15)
self.input_frame = tk.Frame(master=self.init_window_name) # 创建存放文本输入,文件选择组件的容器
self.input_frame.grid(padx=20, pady=5, row=1, column=0,
sticky=tk.W) # 外间距20px,上下间距0,1行,0(从0开始)列
lb1 = tk.Label(self.input_frame, text="目标文件(必填):", font=font)
lb1.grid(row=0, column=0, padx=linePad, pady=linePad, sticky=tk.W)
self.question1 = tk.Entry(self.input_frame, width=50)
self.question1.grid(row=0, column=1)
self.file_input_button = tk.Button(self.input_frame, text="选择文件", fg="white", bg="#1E90FF",
command=self.select_file)
self.file_input_button.grid(row=0, column=2)
lb2 = tk.Label(self.input_frame, text="起始时间(秒):", font=font)
lb2.grid(row=1, column=0, padx=linePad, pady=linePad)
self.question2 = tk.Entry(self.input_frame, width=50)
self.question2.grid(row=1, column=1)
lb3 = tk.Label(self.input_frame, text="结束时间(秒):", font=font)
lb3.grid(row=2, column=0, padx=linePad, pady=linePad)
self.question3 = tk.Entry(self.input_frame, width=50)
self.question3.grid(row=2, column=1)
""" 操作按钮 """
bt = tk.Button(self.input_frame, text="开始提取", command=self.collectAnswers,
font=('行楷', 15, 'bold'), fg="white", bg="#1E90FF", width=16)
bt.grid(row=3, column=1, padx=15, pady=0)
def collectAnswers(self):
self.answers['inputPath'] = self.question1.get()
self.answers['startTime'] = self.question2.get()
self.answers['endTime'] = self.question3.get()
inputPath = self.answers['inputPath']
try:
startTime = int(self.answers['startTime'])
except ValueError:
startTime = 0
try:
endTime = int(self.answers['endTime'])
except ValueError:
endTime = 0
self.mp4ToMp3(inputPath, startTime, endTime)
self.quit()
def select_file(self):
""" 上传文件路径选择 """
path_ = askopenfilename() # 文件选择方法,目录选择是 from tkinter.filedialog import askdirectory,用法一致
self.file_input_dirs = path_ # 将字符串文件地址给变量
self.question1.delete(0, tk.END) # 将文本输入组件的信息删除
self.question1.insert(tk.END, path_) # 在文本输入组件,插入文件导入按钮的字符串地址
# 截取背景音乐
def mp4ToMp3(self, mp4FilePath, startTime=0, endTime=0):
savaPath = mp4FilePath.replace('.mp4', '.mp3')
if endTime <= startTime:
audio_background = mpy.AudioFileClip(mp4FilePath).subclip(t_start=startTime)
else:
audio_background = mpy.AudioFileClip(mp4FilePath).subclip(t_start=startTime,
t_end=endTime)
audio_background.write_audiofile(savaPath)
def quit(self):
app.destroy()
if __name__ == '__main__':
app = tk.Tk()
w0, h0 = app.winfo_screenwidth(), app.winfo_screenheight()
w, h = 640, 200
app.geometry("%dx%d+%d+%d" % (w, h, (w0 - w) / 2, (h0 - h) / 2))
App(app)
app.mainloop()
运行后效果如下图: