Sign inSign up

mobufan/fan-video-dl

By mobufan

•Updated 9 days ago

Image
0

1.4K

mobufan/fan-video-dl repository overview

⁠🎬 fan-video-dl

基于 yt-dlp 的 Web 视频下载器,支持 TLS 指纹伪装绕过基础 Cloudflare 拦截、多线程下载、实时进度显示、抖音无水印、明暗主题切换。

⁠✨ 功能特性

⁠下载能力
  • 🔗 粘贴链接即下载 — 支持 yt-dlp 所有兼容站点(YouTube、B站、各类视频站等)
  • 🛡️ TLS 指纹伪装 — 内置 curl_cffi 模拟 Chrome 指纹,可绕过 Cloudflare Bot Fight Mode 等 TLS 层 403 拦截(不支持 JS 质询/Turnstile)
  • ⚡ 多线程并发 — 支持 5-20 线程同时下载分片,速度拉满
  • 🎵 分离流自动合并 — 智能选择 bestvideo+bestaudio 方案,支持 m3u8/HLS 等只有分离流的源
  • 🎬 画质选择 — 最高画质 / 1080p / 720p / 仅音频(MP3)
  • 🎵 抖音无水印下载 — 专用 API 获取无水印视频,不走 yt-dlp,无需登录
⁠下载与保存
  • 🖥️ 存服务器模式 — 视频下载到服务器硬盘,完成后自动触发浏览器下载,也可在「已下载文件」中在线播放或手动保存
⁠界面交互
  • 📊 实时进度百分比 — 进度条内嵌白色百分比文字 + 右侧数字,保留 1 位小数实时更新
  • 📦 详细下载信息 — 文件大小、下载速度、剩余时间、分片进度、已耗时
  • 🎬 在线播放 — 内置视频播放器,下载完直接预览
  • 📁 文件管理 — 下载列表、文件大小、删除、下载到本地
  • 🎨 明暗主题切换 — 默认亮色主题,一键切换暗色,localStorage 记住选择
  • ❌ 错误信息 — yt-dlp 报错直接显示在任务列表,不再只显示退出码
  • 🧹 缓存清理 — 一键清除临时文件和失效任务记录
  • 🌐 网络代理配置 — 账户页可视化设置并测试 http/socks4/socks5 代理(含出口 IP 显示),对 yt-dlp、抖音 API、网页提取请求统一生效
  • 🎞️ 统一 MP4 输出 — 安装 ffmpeg 时下载后自动转封装,避免 YouTube 等站点输出 .webm
  • 🐳 Docker 部署 — 一键 docker-compose up -d 启动

⁠🚀 快速开始

⁠Docker 部署(推荐)
git clone https://github.com/meimolihan/fan-video-dl.git
cd fan-video-dl
docker-compose up -d

访问 http://localhost:5200

默认账号 admin / admin888

⚠️ 请务必在登录后修改默认密码,或在部署时通过 AUTH_USERNAME / AUTH_PASSWORD 环境变量覆盖。

⁠一键脚本安装(systemd 推荐)

无需克隆仓库,一条命令自动安装:拉取源码、创建 /var/lib/fan-video-dl venv、安装 yt-dlp/curl_cffi/ffmpeg、注册 systemd 服务。

bash -c "$(curl -sSL https://raw.githubusercontent.com/meimolihan/fan-video-dl/main/scripts/install.sh)" -p 5200 -y

参数说明:

参数说明默认值
-p, --port监听端口5200
-d, --install程序安装目录/var/lib/fan-video-dl
-D, --data数据目录(用户库 / SECRET_KEY)${安装目录}/data
-L, --downloads下载文件目录${数据目录}/downloads
-s, --src本地源码仓库路径(需含 app.py)自动从 GitHub 拉取
-y, --yes免交互,未指定项全部用默认值-

示例(自定义安装/数据/下载目录到独立磁盘):

bash -c "$(curl -sSL https://raw.githubusercontent.com/meimolihan/fan-video-dl/main/scripts/install.sh)" \
  -p 5200 -d /opt/fan-video-dl -D /var/lib/fan-video-dl-data -L /mnt/down-disk/downloads -y

国内网络拉取源码缓慢时,用镜像仓库加速: FAN_VIDEO_DL_REPO=https://ghfast.top/https://github.com/meimolihan/fan-video-dl.git bash -c "$(curl ...)" -p 5200 -y

升级方式:再次执行同样的 install.sh 命令(数据自动保留)。命令行工具:fan-video-dl help。

登录访问 http://<服务器IP>:5200,默认账号 admin / admin888(登录后请立即修改)。

⁠本地运行
# 安装系统依赖
sudo apt install ffmpeg

# 安装 Python 依赖
pip install -r requirements.txt

# 启动
python app.py

访问 http://localhost:5200

⁠📖 使用说明

  1. 在输入框粘贴视频链接
  2. 选择画质(最高画质 / 1080p / 720p / 仅音频)
  3. 选择并发线程数(默认 10)
  4. 点击「下载」按钮
  5. 在「下载队列」查看实时进度(进度条显示百分比)
  6. 下载完成后自动触发浏览器下载;也可在「已下载文件」中在线播放或手动保存

⁠🛠️ 技术栈

组件说明
FlaskWeb 后端框架
gunicorn生产级 WSGI 服务器(单 worker 多线程)
yt-dlp视频下载核心引擎
curl_cffiTLS 指纹伪装(绕过基础 Cloudflare 拦截)/ 抖音API请求
douyin_downloader抖音无水印视频下载模块
ffmpeg视频合并/转码
原生 JS前端,无框架依赖

⁠⚙️ 配置

环境变量默认值说明
PORT5200Web 服务端口
AUTH_USERNAMEadmin登录用户名
AUTH_PASSWORDadmin888登录密码
SECRET_KEY自动生成并持久化Flask Session 密钥(重启后保持登录)

⁠📂 目录结构

fan-video-dl/
├── app.py                 # Flask 后端
├── douyin_downloader.py   # 抖音无水印下载模块(含 ttwid 自动刷新)
├── cli.py                 # 内置 CLI 管理命令 (status/credentials/uninstall 等)
├── templates/
│   └── index.html         # Web UI(明暗主题)
├── scripts/               # 运维脚本 (install/uninstall/backup/recover/build-and-push)
├── version.txt            # 版本号(发版脚本维护)
├── downloads/             # 下载文件目录
├── data/                  # 用户数据库 + 持久化 SECRET_KEY
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── .dockerignore
└── README.md

⁠📋 版本与更新日志

本项目采用语义化版本号格式:vX.Y.Z(如 v1.0.0)

  • 发版脚本 scripts/build-and-push.sh vX.Y.Z 自动更新 version.txt、提交并推送 tag
  • 推送 tag 后 GitHub Actions(.github/workflows/release.yml)自动完成:构建并推送 Docker 镜像(Docker Hub + GHCR)、创建 GitHub Release、同步 CNB 镜像仓库
  • 发版备注可写入 RELEASE_NOTES.md(或发版时用 -m 传入)
  • Web 界面版本号取自 version.txt / CI 注入的 APP_VERSION
  • 容器重启不会改变版本号,只有代码更新才会

查看所有版本:Releases⁠

⁠历史更新
  • 一键安装脚本增强 — 新增 -d 程序目录 / -D 数据目录 / -L 下载目录自定义;修复旧安装目录被误识别为源码、导致升级无法拉取新版的问题
  • MP4 统一输出 — 检测到 ffmpeg 时自动 --merge-output-format mp4 --remux-video mp4,修复部分 YouTube 视频输出 .webm(v1.1.2)
  • 代理连通测试 — 代理配置支持一键测试与出口 IP 显示(v1.1.1)
  • 网络代理配置 — 账户页可视化设置代理,yt-dlp 与抖音 API、网页提取统一生效(v1.1.0)
  • 抖音无水印下载 — 专用 API 获取无水印视频,自动检测抖音链接,预览视频信息
  • 主题切换 — 默认亮色主题,支持暗色切换,localStorage 记住选择
  • 自动下载 — 存服务器模式完成后自动触发浏览器下载
  • 进度百分比 — 进度条内嵌百分比文字,实时显示下载进度
  • 分离流修复 — 修复 m3u8 等只有 video-only+audio-only 的源下载失败问题
  • 进度不显示修复 — 修复 gunicorn 多 worker 导致 tasks 字典不共享的进度显示问题
  • 错误信息 — 捕获 yt-dlp ERROR 行,前端显示具体错误原因

⁠⚠️ 免责声明

本项目仅供学习和个人使用。使用者需自行承担因使用本工具而产生的一切法律责任。

  • 本工具会将下载的视频存储在部署服务器的 downloads/ 目录中,供在线播放和文件管理
  • 部署者有责任自行管理服务器上的下载内容,及时清理不需要的文件,不应将服务器作为长期存储或公开分发受版权保护内容的场所
  • 下载的视频版权归原作者所有,请勿用于商业用途或二次传播
  • 使用者应遵守所在地区的法律法规以及目标网站的使用条款
  • 对于受版权保护的内容,应事先获得版权方授权
  • 开发者不对使用者的下载行为及服务器上存储的内容承担任何法律责任

如版权方认为本工具涉及侵权,请通过 Issues⁠ 联系。

⁠License

MIT

Tag summary

Content type

Image

Digest

sha256:a270cc554…

Size

231.2 MB

Last updated

9 days ago

docker pull mobufan/fan-video-dl