Install
openclaw skills install douyin-video-to-txt抖音视频转文本知识库 — Download Douyin videos, transcribe to text via faster-whisper, save to Obsidian knowledge base.
openclaw skills install douyin-video-to-txt下载抖音视频 → 提取音频 → faster-whisper 转写文字 → 输出双版本字幕 → 写入 Obsidian 知识库
纯本地运行,不需要任何外部 API Key。
| 工具 | 用途 | 安装 |
|---|---|---|
| yt-dlp | 下载抖音视频 | brew install yt-dlp |
| FFmpeg | 提取音频 | brew install ffmpeg |
| faster-whisper | 语音转文字 | pip3 install faster-whisper |
环境变量(可选,用于 Obsidian 知识库路径):
OBSIDIAN_VAULT_PATH — Obsidian vault 根目录,默认 ~/Documentsmkdir -p /tmp/douyin_analysis/{VIDEO_ID}
cd /tmp/douyin_analysis/{VIDEO_ID}
yt-dlp --print-json "{DOUYIN_URL}" 2>/dev/null | python3 -c "
import json, sys
d = json.load(sys.stdin)
print(f'ID={d[\"id\"]}')
print(f'Title={d[\"title\"]}')
print(f'Duration={d[\"duration\"]}')
print(f'Uploader={d.get(\"uploader\",\"\")}')
print(f'UploadDate={d.get(\"upload_date\",\"\")}')
"
yt-dlp -o "video.mp4" "{DOUYIN_URL}" 2>/dev/null
ffmpeg -i video.mp4 -ar 16000 -ac 1 -c:a pcm_s16le audio.wav -y 2>/dev/null
from faster_whisper import WhisperModel
model = WhisperModel('small', device='auto', compute_type='auto')
segments, info = model.transcribe('/tmp/douyin_analysis/{VIDEO_ID}/audio.wav', language='zh')
all_segments = []
for seg in segments:
all_segments.append(seg)
# 输出 1: 带时间戳版本
with open('/tmp/douyin_analysis/{VIDEO_ID}/text.txt', 'w', encoding='utf-8') as f:
for seg in all_segments:
line = f'[{seg.start:.1f}s -> {seg.end:.1f}s] {seg.text.strip()}'
f.write(line + '\n')
# 输出 2: 纯文字稿(无时间戳)
plain_lines = []
for seg in all_segments:
plain_lines.append(seg.text.strip())
plain_text = '\n'.join(plain_lines)
with open('/tmp/douyin_analysis/{VIDEO_ID}/text_plain.txt', 'w', encoding='utf-8') as f:
f.write(plain_text)
把纯文字稿保存到知识库中合适的目录下。每条视频保存为一个独立的 markdown 文件,格式如下:
---
source: 抖音
url: {DOUYIN_URL}
author: {UPLOADER}
date: {UPLOAD_DATE}
duration: {DURATION}s
tags: [抖音转录, {AUTHOR}]
---
# {TITLE}
**来源:** 抖音 | **作者:** {UPLOADER} | **时长:** {DURATION}s
---
## 文字稿
{PLAIN_TEXT}
知识库路径规则:
$OBSIDIAN_VAULT_PATH/douyin_text/{TITLE_SLUG}.mdOBSIDIAN_VAULT_PATH 未设置,默认 ~/Documents/douyin_text/VAULT="${OBSIDIAN_VAULT_PATH:-$HOME/Documents}"
TARGET_DIR="$VAULT/douyin_text"
mkdir -p "$TARGET_DIR"
# 用视频标题做文件名(清理特殊字符)
SAFE_TITLE=$(echo "$VIDEO_TITLE" | sed 's/[\/:*?"<>|]/_/g' | cut -c1-60)
NOTE_PATH="$TARGET_DIR/${SAFE_TITLE}.md"
python3 << 'PYEOF'
import os
url = "{DOUYIN_URL}"
title = """{TITLE}"""
uploader = "{UPLOADER}"
date = "{UPLOAD_DATE}"
duration = "{DURATION}"
with open('/tmp/douyin_analysis/{VIDEO_ID}/text_plain.txt', 'r', encoding='utf-8') as f:
plain_text = f.read()
note = f"""---
source: 抖音
url: {url}
author: {uploader}
date: {date}
duration: {duration}s
tags: [抖音转录, {uploader}]
---
# {title}
**来源:** [抖音]({url}) | **作者:** {uploader} | **时长:** {duration}s
---
## 文字稿
{plain_text}
"""
with open('{NOTE_PATH}', 'w', encoding='utf-8') as f:
f.write(note)
PYEOF
读取 text.txt 和 text_plain.txt,用 AI 生成:
同时把 AI 总结追加写入 Obsidian 笔记文件(在文字稿下方追加 ## AI 总结 和 ### 核心要点 部分)。
# 装依赖(首次)
brew install yt-dlp ffmpeg 2>/dev/null
pip3 install faster-whisper 2>&1 | tail -3
URL="https://www.douyin.com/video/xxxxx"
VID="xxx"
mkdir -p /tmp/douyin_analysis/$VID
cd /tmp/douyin_analysis/$VID
# 下载
yt-dlp -o "video.mp4" "$URL"
# 提取音频
ffmpeg -i video.mp4 -ar 16000 -ac 1 -c:a pcm_s16le audio.wav -y 2>/dev/null
# 转写(双版本)
python3 << 'PYEOF'
from faster_whisper import WhisperModel
model = WhisperModel('small', device='auto', compute_type='auto')
segments, info = model.transcribe('audio.wav', language='zh')
segs = [seg for seg in segments]
with open('text.txt', 'w', encoding='utf-8') as f:
for seg in segs:
f.write(f'[{seg.start:.1f}s -> {seg.end:.1f}s] {seg.text.strip()}\n')
plain = '\n'.join(s.text.strip() for s in segs)
with open('text_plain.txt', 'w', encoding='utf-8') as f:
f.write(plain)
PYEOF
# 写入知识库
VAULT="${OBSIDIAN_VAULT_PATH:-$HOME/Documents}"
TARGET="$VAULT/douyin_text"
mkdir -p "$TARGET"
cp text_plain.txt "$TARGET/video-title.txt"
/tmp/douyin_analysis/{VIDEO_ID}/)| 文件 | 内容 |
|---|---|
video.mp4 | 下载的原视频 |
audio.wav | 提取的音频(16kHz 单声道) |
text.txt | 带时间戳的完整字幕文本 |
text_plain.txt | 纯文字稿(无时间戳,连续文本) |
| 路径 | 内容 |
|---|---|
$OBSIDIAN_VAULT/douyin_text/{标题}.md | 含元数据 + 完整文字稿 + AI 总结的笔记 |
device='auto' 会自动用 MPS(Metal)加速,速度很快/ : * ? " < > |)会自动替换为 _OBSIDIAN_VAULT_PATH 读取,默认 ~/Documents