如何从视频(MV)中提取音频作为mp3?

现如今好多音乐网站的歌曲需要会员才能听,再次分享一个提取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()

运行后效果如下图:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值