抖音 · 字幕提取
抖音字幕提取:口播和画面上的字幕一起提
简单说:贴一条抖音链接,返回带秒数的口播字幕,和压在画面里的字幕、花字(带大致时间)。不用下载视频、不登录。 5 分钟视频完整读取 6 积分(约 ¥0.864),只要口播 3 积分;要 SRT 文件,用下面 5 行代码转。
两种字幕
抖音视频的「字幕」其实是两样东西
口播字幕
视频里说的话。抖音大部分视频没有可以下载的字幕文件,所以按语音转写,每段带开始的秒数(transcript)。
只要这一种就选「只要文案」:每 2 分钟 1 积分,5 分钟视频 3 积分。
画面上的字幕、花字
剪辑时压在画面里的字幕条、大字标题、花字。逐帧识别出来,每条带大致时间(on_screen),和口播分开放。
用完整读取:1 积分起,每分钟 1 积分,5 分钟视频 6 积分,口播也一起给。
import time, requests
API = "https://linkdigest.dev/api/v1/digest"
H = {"Authorization": "Bearer ld_live_..."} # 控制台 → API 密钥
body = {"url": "https://v.douyin.com/xxxxxxx/"} # 分享链接或整段分享文案
while True: # 视频读得久时先返回 pending,同样的请求再发一次,只扣一次费
r = requests.post(API, headers=H, json=body).json()
if not r.get("pending"):
break
time.sleep(15)
def ts(s):
ms = int(round(s * 1000))
h, ms = divmod(ms, 3_600_000); m, ms = divmod(ms, 60_000); sec, ms = divmod(ms, 1000)
return f"{h:02}:{m:02}:{sec:02},{ms:03}"
segs = r["transcript"] # 口播字幕;画面上的字在 r["on_screen"]
with open("subs.srt", "w", encoding="utf-8") as f:
for i, seg in enumerate(segs):
end = segs[i + 1]["t"] if i + 1 < len(segs) else seg["t"] + 5
f.write(f"{i + 1}\n{ts(seg['t'])} --> {ts(end)}\n{seg['text']}\n\n")在 AI 工具里
接进 Claude Code / Cursor,贴链接说「把字幕提出来」
claude mcp add --transport http linkdigest \ https://linkdigest.dev/mcp \ --header "Authorization: Bearer ld_live_..."
常见问题
- 抖音字幕提取有免费的吗?
- 注册送 10 积分,不用绑卡:只要口播字幕大约能提 20 分钟的视频。之后支付宝 ¥9.9 买 50 积分,一次性、不订阅、不过期。同一条视频任何人提过,再提不扣积分。
- 能直接导出 SRT 字幕文件吗?
- 不直接给 SRT 文件。返回的口播字幕每段都带开始秒数,可以复制成 Markdown 或拿 JSON;本页的 5 行代码把它写成 subs.srt,导进剪映、Premiere 都能用。
- 提出来的字幕准吗?
- 口播清楚的视频基本准;方言、多人抢话、背景音乐很响时会出错。画面上的字是逐帧识别的,字号小、动得快的花字可能漏掉,时间是大致的(按抽帧的时刻)。
- 要下载视频吗?要登录抖音吗?
- 都不用。在网页里贴链接就行,不登录、不用 Cookie,也不提供视频下载。个别视频抖音的播放器不给外部读取,这一条说明原因、不扣积分,可以在抖音里保存后上传。
- 要提几十条视频的字幕呢?
- 控制台选「多条链接 → 一页」一次贴一批,或者用批量接口;做法和条数上限见「批量提取抖音文案」页(linkdigest.dev/zh/douyin-wenan-piliang-tiqu)。
不用注册先试一条;注册送 10 积分,不用绑卡。支持的平台上有链接读不出来,就是一个值得报告的 bug。