ytdlp要求登陆,idm在很多页面也没有下载提示了
下载狗,这些头部视频网站一网打尽。
试试吧…还不错使用
我一直用 yt-dlp,没遇到需要 cookies 的情况啊
好用。不错
他ip太脏了
可以试试 这个
IDM没法下载的,可以买个正版
现在更新太频繁了
可能他想下载要验证年龄的视频;那需要登录后导出cookies让yt-dlp引用。
应该是ip问题,google也经常弹出recaptcha
推荐 cobalt,cobalt 发推抱怨字节跳动滥用它们的服务上了昨天的 hacker news 热门。
不错,很专业
以前常用YouTube to MP4 & MP3 Converter - ClipConverter.cc 现在都用4kdownload
谢谢,clipconvert.cc好像不能用了,4kdownload回头试试
4K Video Downloader Plus感觉还挺好用的,就直接买了正版,有终身版,可以不用按年订阅
使用github上的youtube-dl源码自己编译,它是平均3天一更新的,一致没有问题
开源的YTDLnis可以app内登录,导入cookies
奇怪,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()