[Python]Python写的下载视频的工具

[Python]Python写的爬取视频

这是一个用于下载视频的GUI工具(视频只能作为测试所用)。让我来解释一下代码的功能。

首先,我们导入了必要的模块,包括tkinter用于构建GUI界面,yt_dlp用于下载视频,以及os用于处理文件路径和环境变量。

接下来,我们获取当前脚本所在的文件夹路径,并构建了ffmpeg库文件夹的完整路径。然后,我们将该路径添加到环境变量PATH中,以便能够正确执行ffmpeg命令。

然后,我们定义了一个名为progress_hook的函数,用于更新下载进度条。在下载过程中,我们通过计算已下载字节和总字节数的比例来更新进度条的值,并使用window.update()方法来刷新界面。

接下来,我们定义了download_video函数,用于处理视频下载的逻辑。我们首先获取用户输入的视频URL和下载路径。然后,我们使用yt_dlp库设置下载选项,并使用YoutubeDL对象进行视频下载。下载过程中,我们会调用progress_hook函数来更新进度条。最后,我们清空URL输入框和路径输入框,并在状态标签中显示下载完成的信息。

我们创建了GUI界面。界面包括一个URL输入框、一个下载路径输入框、一个下载按钮、一个下载进度条和一个状态标签。当用户点击下载按钮时,会调用download_video函数来开始下载视频。

运行整个GUI界面的逻辑是通过调用window.mainloop()实现的。

这个脚本需要以下几个库的支持:

tkinter:用于构建图形用户界面(GUI)。
yt_dlp:一个用于下载YouTube视频的库,是对youtube-dl的一个分支,提供了更多功能和选项。
os:用于处理文件路径和环境变量。
如果你还没有安装这些库,可以使用以下命令来安装它们:

pip install tkinter
pip install yt-dlp

请确保你的Python环境已经正确安装,并且可以使用pip来安装第三方库。

当然你还需要ffmpeg库的安装
你可以去官网下载;具体你可以参照这个博文:
添加链接描述

你也可以把ffmpeg库放在根目录下。

源码如下:

import tkinter as tk
from tkinter import ttk
import yt_dlp
import os
#以下4行代码用来支持ffmpeg的库文件来自于本目录
# 获取当前脚本所在的文件夹路径
script_dir = os.path.dirname(os.path.abspath(__file__))

# 构建ffmpeg库文件夹的完整路径
ffmpeg_path = os.path.join(script_dir, "ffmpeg", "bin")

# 获取当前的环境变量PATH值
path_env = os.environ.get("PATH", "")

# 将本文件夹的路径添加到PATH环境变量中
os.environ["PATH"] = f"{ffmpeg_path};{path_env}"

def progress_hook(progress):
    """
    下载进度回调函数,用于更新下载进度条
    """
    if progress['status'] == 'downloading':
        total_bytes = progress.get('total_bytes')
        downloaded_bytes = progress.get('downloaded_bytes')
        if total_bytes and downloaded_bytes:
            percent = downloaded_bytes / total_bytes * 100
            # 更新进度条的值
            progress_bar['value'] = percent
            # 更新界面
            window.update()

def download_video():
    """
    视频下载函数,处理视频下载的逻辑
    """
    video_url = url_entry.get()
    download_path = path_entry.get()
    
    ydl_opts = {
        'default_search': 'ytsearch',
        'outtmpl': download_path + '/%(title)s.%(ext)s',
        'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
        'progress_hooks': [progress_hook],
        'verbose': True
    }

    with yt_dlp.YoutubeDL(ydl_opts) as ydl:
        info_dict = ydl.extract_info(video_url, download=False)
        author_name = info_dict.get('uploader', "未知作者")
        video_name = info_dict.get('title', "未知视频")
        ydl.download([video_url])
    
    url_entry.delete(0, tk.END)
    path_entry.delete(0, tk.END)
    status_label.config(text=f"下载完成!作者:{author_name} 视频名称:{video_name}")

# 创建GUI界面
window = tk.Tk()
window.title("YouTube视频下载工具")

# URL输入框
url_label = tk.Label(window, text="视频URL:")
url_label.pack()
url_entry = tk.Entry(window, width=50)
url_entry.pack()

# 下载路径输入框
path_label = tk.Label(window, text="下载路径:")
path_label.pack()
path_entry = tk.Entry(window, width=50)
path_entry.pack()

# 下载按钮
download_button = tk.Button(window, text="下载视频", command=download_video)
download_button.pack()

# 下载进度条
progress_bar = ttk.Progressbar(window, orient=tk.HORIZONTAL, length=200, mode='determinate')
progress_bar.pack()

# 状态标签
status_label = tk.Label(window, text="")
status_label.pack()

# 运行GUI
window.mainloop()

在这里插入图片描述

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值