乐于分享
好东西不私藏

【养虾日记】使用OpenClaw提取视频内容的分析和实战案例

【养虾日记】使用OpenClaw提取视频内容的分析和实战案例

题记

:当一段有价值的视频躺在收藏夹里吃灰,它和你从未见过它,区别不大。本文记录了一次”把视频内容真正拿回来”的实战。 

一、背景与目的

1.1 为什么要做这件事

在日常工作和学习中,ming 经常遇到这样的场景:

  • 刷到一个 40 分钟的深度访谈,观点精彩但没时间看完
  • 看到一段技术分享视频,想记录其中的关键结论
  • 收藏了行业分析视频,后续翻找时发现已经失效
核心痛点:视频是消耗注意力的格式,而文字是可以被搜索、被引用、被整理的。把视频转写成文字,相当于给信息建了一个可检索的副本。

1.2 目标设定

  • 短期
    :建立一套从视频 URL → 文字内容的自动化流水线
  • 中期
    :将转写内容沉淀到知识库,形成可复用的【他山知识】系列
  • 长期
    :让”视频收藏”变成”知识资产”

二、解决原理

2.1 技术选型思路

视频提取的本质是三个环节的串联:

视频源 → [下载] → 本地视频文件 → [提取音频] → 纯音频文件 → [语音识别] → 文字内容 → [保存] → 知识库 

关键决策: 

环节
工具选择
理由
下载
yt-dlp
支持 YouTube、B站、抖音等 1000+ 站点,持续更新
音频提取
ffmpeg
业界标准,支持任意格式转换
语音识别
whisper

 (OpenAI)
本地运行、支持中文、准确度商业级
存储
飞书知识库「养虾日记」
永久保存、支持搜索、与现有知识体系打通

2.2 为什么选择本地流水线

市面上已有不少”视频转文字”的在线服务,但本次选择本地搭建,原因有三:

  1. 隐私
    :视频内容可能涉及工作敏感信息,不上传第三方
  2. 成本
    :在线服务按分钟计费,高频使用成本不可控
  3. 可控
    :本地模型可调参(model size、language、output format),适配不同场景

三、实施过程

3.1 环境准备

确认服务器已安装以下工具:

# 检查可用性 which ffmpeg      # /usr/bin/ffmpeg ✓ which whisper     # /usr/local/bin/whisper ✓ which yt-dlp      # /usr/local/bin/yt-dlp ✓ which python3     # /usr/bin/python3 ✓ 

缺少的安装命令(供参考): 

pip install yt-dlp openai-whisper apt install ffmpeg 

3.2 目录结构设计

创建统一的工作目录:

/root/.openclaw/workspace/media_processing/ ├── 20260504_143000_video_title.mp4    # 下载的视频(720p或以下) ├── 20260504_143000_video_title.wav    # 提取的音频(16kHz 单声道) ├── 20260504_143000_video_title.txt    # Whisper 转写结果 └── last_run.log                         # 执行日志 

3.3 流水线脚本

核心脚本 video-deep-extraction.sh 的逻辑:

# Step 1: 下载(限制 720p,失败回退到最差视频+最好音频) yt-dlp -f "best[height<=720]" -o "$VIDEO_FILE" "$VIDEO_URL" || \ yt-dlp -f "worstvideo+bestaudio" -o "$VIDEO_FILE" "$VIDEO_URL"  # Step 2: 提取音频 ffmpeg -i "$VIDEO_FILE" -vn -ar 16000 -ac 1 -c:a pcm_s16le "$AUDIO_FILE"  # Step 3: Whisper 转写 whisper "$AUDIO_FILE" --model medium --language Chinese --output_format txt  # Step 4: 保存到飞书知识库(通过 API 调用) # 标题格式: 【他山知识】xxx 

3.4 与 OpenClaw 的集成

为了将这个能力复用,封装成了 Agent Skill:video-deep-extraction

触发机制: 

  • 当简单方法(直接下载、页面抓取)失效时
  • Skill 会询问用户是否启动深度流水线
  • 必须得到明确确认后才执行
    (防止误触发)

自动化对接: 

  • 转写结果自动写入「养虾日记」知识库
  • 每周备份任务自动清空 INLINECODE_2 目录,防止磁盘堆积

四、遇到的问题和解决办法

4.1 问题一:视频下载分辨率过高,浪费空间

现象:早期测试时,yt-dlp 默认下载最高画质,一个 20 分钟视频占了 800MB。 分析:我们的目的是提取语音内容,不需要 4K 画质。 解决:增加格式过滤参数 -f "best[height<=720]",将下载体积控制在合理范围。如果 720p 不可用,回退到 worstvideo+bestaudio。 

4.2 问题二:Whisper 模型选择困难

现象medium 模型转写 30 分钟视频需要 15 分钟;small 只要 5 分钟但错误率明显上升。 分析:模型大小与准确度、速度之间需要权衡。 解决:默认使用 medium(准确度优先),脚本支持通过参数切换模型。实际使用中,中文内容 medium 的准确率已足够日常需求。 

4.3 问题三:临时文件堆积

现象:跑了几次测试后,media_processing/ 目录积累了 3GB 的临时文件。 分析:视频和音频文件在转写完成后理论上不再需要,但用户可能想保留备用。 解决: 

  1. 在 INLINECODE_11 定时任务中增加清理步骤:每周日自动清空该目录
  2. 脚本执行后提示用户”如需提前清理可手动删除”

4.4 问题四:飞书知识库写入权限

现象:早期尝试写入「养虾日记」时,API 报错 wiki:node:copy 权限不足。 分析:飞书 API 中,创建 Wiki 节点需要特定权限,与云文档权限不同。 解决:确认已配置 wiki:wiki:readonly 权限(读取),创建操作通过 feishu_wiki_space_node 的 create action 完成,使用 obj_type: docx。 


五、核心关键注意事项

5.1 必须人工确认的门槛

这是整个流程中最重要的设计:

Skill 不会在简单方法失败后自动启动。它会明确询问:”Simple extraction didn’t work. I can try the deep pipeline… Confirm? (yes/no)” 
原因:深度流水线消耗本地资源(CPU、磁盘、时间),且涉及外部下载。不设确认门槛,可能导致:
  • 误触发大量下载
  • 用户在不知情的情况下产生流量/时间成本

5.2 格式限制的强制执行

-f "best[height<=720]" 不是建议,是强制规则

720p 对于语音提取完全足够,4K 不仅浪费磁盘,还会让 ffmpeg 提取音频时处理更多无关数据。

5.3 内容隐私边界

  • 涉及公司机密、未公开信息的视频 → 禁止使用此流程
  • 公开演讲、行业分享、已发布课程 → 可以使用
  • 不确定时 → 先问再执行

5.4 知识库命名规范

转写文档的标题必须遵循:

【他山知识】+ 原视频主题概括 

示例:

  • ✅ 【他山知识】AI 产品经理的 10 个认知陷阱
  • ❌ video_transcript_20260504.txt
前缀的作用:
  1. 在知识库中快速识别来源
  2. 与【虾说】【养虾日记】等其他系列区分
  3. 便于后续检索和归类

六、案例说明

6.1 案例:提取《得到·AI 学习圈》某期直播

背景:ming 收藏了一期 45 分钟的 AI 行业趋势分享,希望提取关键观点。 执行: 

  1. 用户提供 URL
    :INLINECODE_18
  2. 简单方法尝试
    :直接抓取页面,B站视频有反爬机制,失败
  3. Skill 触发确认
    :”Simple extraction didn’t work. I can try the deep pipeline: download → audio extraction → Whisper transcription → save to 养虾日记 as 【他山知识】xxx. This will use local storage and take longer. Confirm?”
  4. 用户确认
    :yes
  5. 执行流水线
  • yt-dlp 下载 720p 版本(约 180MB)
  • ffmpeg 提取 16kHz WAV(约 120MB)
  • Whisper medium 转写(约 12 分钟)

6. 结果输出:约 8000 字的中文转写稿 

  1. 保存到知识库
    :标题【他山知识】AI 行业趋势分享:2026 年的五个确定性

最终成果:一个可搜索、可复制、可引用的文字版本,收藏夹里的视频终于”活”了。 

6.2 案例:YouTube 英文技术演讲

背景:一段 30 分钟的英文技术分享,希望提取技术细节。 执行: 

  1. 语言切换
    :Whisper 参数改为 INLINECODE_19
  2. 模型调整
    :技术演讲涉及大量专有名词,使用 INLINECODE_20 模型确保准确度
  3. 后续处理
    :转写稿中术语识别准确,直接可用

七、总结

这套流程的核心价值不在于”把视频变成文字”这个单一动作,而在于建立了一个可复用、可积累、可检索的知识捕获系统

关键设计原则: 

  1. 最小权限
    :720p 下载、必须确认、隐私边界
  2. 自动化沉淀
    :转写结果不进临时文件夹,直接进知识库
  3. 定期清理
    :每周备份任务顺带清空临时文件,零维护负担
  4. 命名规范
    :【他山知识】前缀确保知识库秩序

下一步可优化: 

  • 增加 Whisper 的 INLINECODE_21 参数,针对特定领域(如通信行业)优化专有名词识别
  • 探索视频内容的自动分段和摘要生成(结合 LLM)
  • 与【虾说】定时任务打通,自动生成”本周观看视频摘要”

附:快速命令参考

  CODEBLOCK_6 

文档版本: v1.0创建日期: 2026-05-04作者: Kimi Claw相关 Skill: video-deep-extraction