还有什么可以方法方便的直接下载youtube视频吗?

ytdlp要求登陆,idm在很多页面也没有下载提示了

1 个赞

下载狗,这些头部视频网站一网打尽。

2 个赞

试试吧…还不错使用

https://snaptik.biz/zh-cn

2 个赞

我一直用 yt-dlp,没遇到需要 cookies 的情况啊

1 个赞

好用。不错

他ip太脏了

1 个赞

可以试试 这个

IDM没法下载的,可以买个正版

现在更新太频繁了

可能他想下载要验证年龄的视频;那需要登录后导出cookies让yt-dlp引用。

1 个赞

应该是ip问题,google也经常弹出recaptcha

推荐 cobalt,cobalt 发推抱怨字节跳动滥用它们的服务上了昨天的 hacker news 热门。

2 个赞

不错,很专业

以前常用YouTube to MP4 & MP3 Converter - ClipConverter.cc 现在都用4kdownload

1 个赞

谢谢,clipconvert.cc好像不能用了,4kdownload回头试试

也可以试试9convert.com/en429

1 个赞

4K Video Downloader Plus感觉还挺好用的,就直接买了正版,有终身版,可以不用按年订阅

1 个赞

使用github上的youtube-dl源码自己编译,它是平均3天一更新的,一致没有问题

1 个赞

开源的YTDLnis可以app内登录,导入cookies

1 个赞

奇怪,b站下不了啊,换了几个视频couldnt find any media。我是说cobalt

我认为目前来说当你需要的下载一个视频的时候,IDM始终是首选,IDM没有下载提示一般就是没有更新到最新版的缘故。
另外批量下载确实还是yt-dlp最方便,不过目前需要加载浏览器的cookies。yt-dlp的issues中 有大神写了 yt-dlp-ChromeCookieUnlock的插件,用于解锁 浏览器的cookies。
安装好这个插件之后,就可以通过–cookies-from-browser "浏览器名称"来获取cookies了。
以下是一个简单的python脚本,仅供参考。希望有大神能够继续完善

import yt_dlp
import tkinter as tk
from tkinter import messagebox, filedialog
import os
import threading
import urllib.request
import winreg  # 添加此行以导入 winreg 模块
import sys  # 添加此行以导入 sys 模块

def get_system_proxy():
    # 获取系统代理设置
    proxy = urllib.request.getproxies()
    return proxy.get('http') or proxy.get('https')

def get_default_browser():
    try:
        # 打开注册表项
        with winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice') as key:
            browser_name, _ = winreg.QueryValueEx(key, 'ProgId')  # 获取浏览器的 ProgId
        
        # 映射浏览器名称
        browser_map = {
            'ChromeHTML': 'Chrome',
            'ChromiumHTM': 'Chromium',
            'MSEdgeHTM': 'Edge',
            'BraveHTML': 'Brave',
            'FirefoxURL': 'Firefox',
            'OperaHTML': 'Opera',
            'SafariHTML': 'Safari',
            'VivaldiHTM': 'Vivaldi',
            'WhaleHTML': 'Whale'
        }
        
        return browser_map.get(browser_name, browser_name)  # 返回映射后的浏览器名称
    except Exception as e:
        print(f"获取默认浏览器失败: {e}")
        return None


def download_video(url, output_dir):
    # 确保输出路径是一个目录
    if not os.path.isdir(output_dir):
        messagebox.showerror("错误", "请提供有效的目录路径。")
        return

    browser_name = get_default_browser()  # 获取默认浏览器名称
    if not browser_name:
        messagebox.showerror("错误", "无法获取默认浏览器名称。")
        return

    print(f"获取到的浏览器名称: {browser_name}")  # 输出浏览器名称

    system_proxy = get_system_proxy()  # 获取系统代理
    if system_proxy is None:  # 检查代理是否为 None
        messagebox.showwarning("警告", "未检测到系统代理,将不使用代理。")
    command = [
        'yt-dlp',
        '--format', 'bestvideo+bestaudio/best',
        '--output', os.path.join(output_dir, '%(title)s.%(ext)s'),
        '--cookies-from-browser', browser_name,
        '--proxy', system_proxy if system_proxy else None,
        '--downloader', 'aria2c',  # 使用 aria2c 作为下载器
        url
    ]

    try:
        # 使用 subprocess 运行命令行
        import subprocess
        subprocess.run(command, check=True)
        messagebox.showinfo("成功", "下载完成!")
    except Exception as e:
        messagebox.showerror("错误", f"下载失败: {e}")

def start_download():
    url = url_entry.get()
    output_dir = output_entry.get()
    if not url:  # 检查链接是否为空
        messagebox.showerror("错误", "请填写视频链接。")
        return
    # 如果用户没有指定下载目录,则使用脚本启动目录
    if not output_dir:
        output_dir = os.path.dirname(os.path.abspath(__file__))
    output_entry.delete(0, tk.END)  # 更新输出框显示
    output_entry.insert(0, output_dir)
    # 在新线程中运行下载任务
    threading.Thread(target=download_video, args=(url, output_dir)).start()


def select_output_path():
    path = filedialog.askdirectory()  # 选择目录
    output_entry.delete(0, tk.END)
    output_entry.insert(0, path)

# 检查命令行参数
if len(sys.argv) > 2:
    url = sys.argv[1]
    output_dir = sys.argv[2]
    download_video(url, output_dir)  # 直接调用下载函数
else:
    # 创建主窗口
    root = tk.Tk()
    root.title("YouTube 视频下载器")


    # 创建输入框和标签
    frame = tk.Frame(root)
    frame.pack(padx=10, pady=10)
    
    tk.Label(frame, text="请输入 YouTube 视频或播放列表链接:").grid(row=0, column=0, sticky="w")
    url_entry = tk.Entry(frame, width=50)
    url_entry.grid(row=1, column=0, pady=5)
    
    tk.Label(frame, text="请选择保存目录:").grid(row=2, column=0, sticky="w")
    output_entry = tk.Entry(frame, width=50)
    output_entry.grid(row=3, column=0, pady=5)
    
    # 设置输出框为脚本启动目录
    output_entry.insert(0, os.path.dirname(os.path.abspath(__file__)))
    
    # 创建选择路径按钮
    select_button = tk.Button(frame, text="选择保存目录", command=select_output_path)
    select_button.grid(row=3, column=1, padx=5)
    
    # 创建下载按钮
    download_button = tk.Button(frame, text="下载", command=start_download)
    download_button.grid(row=4, column=0, columnspan=2, pady=10)


    # 运行主循环
    root.mainloop()
1 个赞