Skip to content

About

基于 FastAPI 的抖音视频本地解析与下载服务:扫码登录、视频解析、清晰度选择、进度下载与在线预览。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

抖音视频与文案工具

基于 FastAPI 的本地 Web 工具。扫码登录抖音后,可以下载单条视频,也可以把视频里的声音通过本机 ASR 转成可复制文案。

页面预览

页面预览一

页面预览二

功能

  • 本地 Web 页面:访问 http://127.0.0.1:8787/ 使用。
  • 扫码登录:通过 Playwright 获取抖音登录二维码,并保存 Cookie。
  • 视频解析:解析单条抖音视频信息和可选清晰度。
  • 下载任务:异步下载视频,前端轮询进度,完成后保存 MP4 文件。
  • 字幕解析:自动发现本地完整的 small/medium 模型,用户可在页面手动选择;默认使用 small。
  • 本地 ASR:使用 faster-whisper、CPU int8 识别视频语音,不依赖云端转写接口。
  • 简体与标点:中文结果自动繁转简,并为缺少标点的中文分段和中文空格补基础逗号、句号。
  • 文案结果:显示真实时间分段,页面全文、复制内容和 UTF-8 TXT 使用同一结果。
  • 双 Tab 页面:“视频下载”和“字幕解析”共用本机 Cookie 与登录状态。
  • 结果持久化:字幕清单和 TXT 保存在 data/transcripts/,重启后仍可查看。

快速开始

macOS / Linux:

./start.sh

Windows:

start.bat

也可以直接运行跨平台启动器:

python start.py

启动后打开:

http://127.0.0.1:8787/

可通过环境变量调整监听地址:

HOST=0.0.0.0 PORT=8787 ./start.sh

手动启动方式:

pip install -r requirements.txt
python -m playwright install chromium
python packaging/windows/download_model.py --model small --destination models/faster-whisper-small
# 可选:下载效果更好但速度更慢的 medium
python packaging/windows/download_model.py --model medium --destination models/faster-whisper-medium
python -m uvicorn api_server:app --host 127.0.0.1 --port 8787

源码模式至少准备一个模型。程序只展示核心文件完整的本地模型,不会联网临时下载:

页面选项 本地目录 适用场景
Small models/faster-whisper-small/ 默认,速度优先
Medium models/faster-whisper-medium/ 效果更好,CPU 识别更慢

当前不支持 large-v3。Windows v1.2.0 完整绿色版同时附带 small 和 medium。

Windows 绿色版

绿色版附带 Windows Python 运行时、Playwright Chromium、small/medium 模型和 OpenCC 数据。同事完整解压后双击 抖音视频工具.exe,程序会启动本地服务并打开默认浏览器;关闭控制台窗口即可退出。

可复现的 PyInstaller Windows 产物应在 Windows 环境构建。macOS 可以复用已经验证的 Windows 运行时组装绿色目录,但不能完成目标 Windows 双击验收。仓库提供手动工作流 .github/workflows/build-windows-portable.yml,也可以在 Windows PowerShell 中运行:

./packaging/windows/build.ps1

输出:

  • releases/抖音视频工具-v1.2.0-win64.zip:首次发送的完整绿色版。

首发版本就是最新版本,不生成同版本更新包。后续版本需要更新包时,再使用 -BuildUpdatePackage -MinimumVersion "1.2.0" 构建。

详细构建和验收步骤见 docs/windows-release.md。

离线一键更新

  1. 把 更新包-vX.Y.Z.zip 放到绿色版程序根目录。
  2. 双击根目录 一键更新.bat。
  3. 更新器结束正在运行的工具,校验清单、文件大小和 SHA-256,再替换程序核心。
  4. 成功后自动重新启动;失败会恢复 _rollback/ 中的旧核心。

普通更新不会覆盖 config.json、douyin_cookie.txt、data/、downloads/、models/、browsers/ 或 一键更新.bat。更新包可以携带新版 updater.ps1:更新器会在核心程序更新成功后最后一步自更新自己(旧版会备份进 _rollback/)。v1.2.1 之前的旧更新器不支持该机制,且存在顶层目录名解析缺陷;旧安装应使用 修复包 一次完成更新器与程序更新:把 修复包-X.Y.Z.zip 内全部文件解压到根目录后双击 一键更新.bat 即可(在子文件夹里直接双击该 bat 也可以)。

首次安装必须发送完整绿色包;更新包不能代替完整包。

API

# 健康检查
curl http://127.0.0.1:8787/health

# 创建扫码登录会话,返回 session_id 和二维码 base64
curl -X POST http://127.0.0.1:8787/auth/session \
  -H 'Content-Type: application/json' \
  -d '{"qr_timeout":30}'

# 查询扫码状态
curl http://127.0.0.1:8787/auth/session/<session_id>

# 解析视频信息和可选清晰度
curl -X POST http://127.0.0.1:8787/parse/video \
  -H 'Content-Type: application/json' \
  -d '{"url":"抖音分享链接","session_id":"<session_id>"}'

# 创建带进度的下载任务
curl -X POST http://127.0.0.1:8787/download/video/task \
  -H 'Content-Type: application/json' \
  -d '{"url":"抖音分享链接","session_id":"<session_id>","quality":"1080p"}'

# 查询下载进度
curl http://127.0.0.1:8787/download/video/task/<task_id>

# 下载完成后获取 mp4 文件
curl -o douyin.mp4 http://127.0.0.1:8787/download/video/task/<task_id>/file

# 创建字幕任务
curl -X POST http://127.0.0.1:8787/transcription/tasks \
  -H 'Content-Type: application/json' \
  -d '{"url":"抖音分享链接","session_id":"<session_id>","model":"medium"}'

# 查看本机可选择的 ASR 模型
curl http://127.0.0.1:8787/asr/models

# 查询字幕任务详情
curl http://127.0.0.1:8787/transcription/tasks/<task_id>

# 下载 UTF-8 TXT 文案
curl -o transcript.txt http://127.0.0.1:8787/transcription/tasks/<task_id>/text

文件结构

douyin-parse/
├── api_server.py                 # FastAPI 服务入口,托管 Web 页面和 API
├── web/index.html                # 本地 Web 页面
├── docs/                         # README 截图等说明资源
├── services/
│   ├── douyin_login.py           # 扫码登录、Cookie 读写
│   ├── download_service.py       # 视频解析和下载
│   ├── download_tasks.py         # 异步下载任务
│   ├── transcription_service.py  # faster-whisper 模型与语音转写
│   └── transcription_tasks.py    # 单并发队列与字幕持久化
├── douyin_video_parser.py        # 抖音视频解析核心逻辑
├── abogus.py                     # a_bogus 算法实现
├── xbogus.py                     # X-Bogus 算法实现
├── server_runtime.py             # exe 内嵌/后台启动服务运行时
├── desktop_launcher.py           # Windows EXE 启动入口
├── runtime_paths.py              # 源码/绿色版便携路径
├── packaging/                    # Windows 构建、更新与校验脚本
├── start.py                      # 跨平台源码启动器
├── start.sh                      # macOS/Linux 启动脚本
├── start.bat                     # Windows 启动脚本
├── tests/test_local_api_helpers.py
└── requirements.txt

本地数据

以下文件或目录由本地运行产生,不应提交到远程仓库:

  • config.json:保存 Cookie 和下载目录配置。
  • douyin_cookie.txt:旧版本 Cookie 文件。当前版本首次读取后会迁移到 config.json 并删除该文件。
  • downloads/:默认下载目录。
  • data/transcripts/:字幕任务 JSON 清单与 TXT 文案。
  • models/faster-whisper-small/:本地 Small ASR 模型。
  • models/faster-whisper-medium/:本地 Medium ASR 模型。
  • __pycache__/:Python 缓存。

常见问题

提示“请先调用 /auth/session 扫码登录”

先在页面中创建扫码登录会话并完成登录,或者确认 config.json 中已有有效 Cookie。

提示“解析失败”相关的具体原因

程序会区分以下情况并给出对应提示:

提示 原因 处理
无法识别视频链接 链接不是抖音视频/图集分享链接 重新复制抖音 App 的分享链接
Cookie 已失效,请在页面上重新扫码登录 登录态过期 在页面重新扫码登录
请求被抖音风控拦截(签名校验未通过) 抖音升级风控,程序签名方案过时 更新程序版本
请求过于频繁被抖音限流 短时间解析太多次 稍等一分钟再试
请求抖音超时 / 网络请求失败 本机网络问题 检查网络后重试
抖音返回错误(status_code=…)或未返回作品数据 作品不存在、已删除或不可见 换个作品链接
当前页面只支持视频,不支持图集 链接是图集 暂不支持图集下载

2026-09 起抖音对网页接口启用了 Argus 风控(x-secsdk-web-signature 签名校验),解析请求已按对应算法签名。如果再次出现“被抖音风控拦截”,说明抖音更换了签名盐值,需要更新 douyin_video_parser.py 中的 WEB_SIGN_SALT。

字幕任务提示“ASR 模型不存在”

源码模式执行:

python packaging/windows/download_model.py --model small --destination models/faster-whisper-small

如果选择 medium,对应目录必须是 models/faster-whisper-medium/。绿色版出现该错误说明发布包不完整,应重新解压完整绿色版;不要用普通更新包代替首次安装包。

为什么旧文案仍然没有标点或还是繁体

简体和基础标点处理只应用于升级后新创建的字幕任务。历史任务不会自动改写;使用原链接重新识别一次即可。

GTX 1050 Ti 为什么没有参与识别

当前版本针对 i5-10400F 使用 CPU int8,以减少 CUDA/cuDNN 体积和驱动兼容问题。程序不承诺固定识别耗时,字幕任务会单并发运行以避免整机过载;medium 通常比 small 更慢。

无法创建二维码

确认已安装依赖并执行过:

python -m playwright install chromium

免责声明

本工具仅供学习交流使用,请勿用于商业用途。下载的视频请遵守相关法律法规和平台规定。

About

基于 FastAPI 的抖音视频本地解析与下载服务:扫码登录、视频解析、清晰度选择、进度下载与在线预览。

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages