YouTube Clipper Skill - 问题分析与修复

January 22, 2026 · View on GitHub

生成时间: 2026-01-21

问题总结

在首次测试运行中,我们遇到了以下问题:

1. Python 依赖缺失 ✅ 已修复

问题:

ModuleNotFoundError: No module named 'yt_dlp'
ModuleNotFoundError: No module named 'pysrt'

原因: macOS 的 Python 环境为外部管理环境(externally-managed),默认不允许使用 pip 安装包

解决方案:

pip3 install --break-system-packages yt-dlp pysrt python-dotenv

状态: ✅ 已安装并验证通过


2. 下载进度钩子除零错误 ✅ 已修复

问题:

TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'

位置: scripts/download_video.py_progress_hook 函数第 161 行

原因: 某些视频在下载时不提供 total_bytes 信息,导致除法运算失败

修复:

# 修复前
if 'downloaded_bytes' in d and 'total_bytes' in d:
    percent = d['downloaded_bytes'] / d['total_bytes'] * 100

# 修复后
if 'downloaded_bytes' in d and 'total_bytes' in d and d['total_bytes']:
    percent = d['downloaded_bytes'] / d['total_bytes'] * 100

同时添加了备用显示逻辑,当无法获取总大小时,只显示已下载大小和速度

文件: scripts/download_video.py:156-178

状态: ✅ 已修复并测试通过


3. 文件名特殊字符问题 ✅ 已修复

问题: 原始视频文件名包含特殊字符(单引号和特殊冒号)导致路径处理困难

Anthropic's Amodei on AI: Power and Risk [Ckt1cj0xjRM].mp4

测试时的临时方案: 手动重命名为 video.mp4subtitle.vtt

根本原因:

  • yt-dlp 的输出模板使用了视频标题,标题中可能包含各种特殊字符
  • 特别是某些 YouTube 视频标题中的冒号可能是全角字符(:而非:)
  • 文件名中的单引号也会导致 shell 命令解析问题

永久修复: 修改 scripts/download_video.py 的输出模板,只使用视频 ID(保证无特殊字符)

# 修复前(第 70 行)
'outtmpl': str(output_dir / '%(title)s [%(id)s].%(ext)s'),

# 修复后
'outtmpl': str(output_dir / '%(id)s.%(ext)s'),

优势:

  • 视频 ID 只包含字母、数字、短横线和下划线(如 Ckt1cj0xjRM
  • 完全避免特殊字符和空格
  • 文件名简洁,兼容性好
  • 视频 ID 是唯一的,不会冲突

文件: scripts/download_video.py:67

状态: ✅ 已修复


4. 输出目录位置不符合预期 ✅ 已修复

问题: 测试时,输出文件保存在 /tmp/youtube_clipper_output/ 目录,而不是用户当前工作目录

用户反馈: "我觉得输出结果需要放到当前打开的文件夹里面"

原因: 测试脚本使用了临时目录,而 utils.py 中的 create_output_dir() 默认使用 ~/Videos/youtube-clips

修复:

  1. utils.py (第 146 行):
# 修复前
if base_dir is None:
    base_dir = Path.home() / "Videos" / "youtube-clips"

# 修复后
if base_dir is None:
    base_dir = Path.cwd() / "youtube-clips"
  1. SKILL.md 文档更新:
  • 阶段 6 输出目录说明: ~/Videos/youtube-clips/./youtube-clips/
  • 示例输出路径更新
  • 添加说明:输出目录位于当前工作目录下

优势:

  • 输出文件在用户当前工作目录,更符合预期
  • 方便管理和查找生成的文件
  • 不会污染用户的 Videos 目录

文件:

  • scripts/utils.py:131-148
  • SKILL.md:240-270

状态: ✅ 已修复


5. 字幕时间戳显示混淆(非实际错误)

现象: 测试时显示 时间范围: 0.00s - -160.00s(负数)

分析:

  • 这只是显示问题,不是数据错误
  • 实际提取了 33 条字幕(从原视频 160-280s 范围)
  • 时间戳调整正确(减去 160s 偏移量)
  • 字幕数据本身完全正确

结论: 不需要修复,测试脚本的显示逻辑略有问题,但不影响功能


成功验证的功能

测试使用视频: https://www.youtube.com/watch?v=Ckt1cj0xjRM

✅ 完整工作流程

  1. 环境检测:

    • yt-dlp 正常检测
    • FFmpeg libass 支持确认
  2. 视频下载:

    • 视频: 368 MB, 25:25 时长
    • 字幕: 41 KB VTT, 405 条字幕
  3. AI 章节分析:

    • 成功生成 10 个精细章节(2-5 分钟粒度)
    • 每个章节包含标题、时间范围、核心摘要
    • 避免了粗粒度切分(没有半小时大章节)
  4. 用户选择:

    • 用户选择章节 2: "企业 vs 消费者"
    • 时间范围: 02:40 - 04:40
  5. 视频剪辑:

    • 成功剪辑 2 分钟片段(29.6 MB)
    • 使用 FFmpeg -ss 和 -t 参数精确裁剪
  6. 字幕处理:

    • 提取 35 条字幕
    • 时间戳正确调整(减去 160s 起始时间)
    • 批量翻译为中文(所有 35 条)
    • 生成双语 SRT 文件(英文在上,中文在下)
  7. 字幕烧录:

    • 使用 FFmpeg libass 滤镜
    • 临时目录方案成功解决路径空格问题
    • 输出视频 30.3 MB,字幕清晰可读
  8. 文案生成:

    • 生成小红书版本(约 800 字)
    • 生成抖音版本(约 280 字)
    • 生成微信公众号版本(完整深度文章)
    • 包含核心观点、金句摘录、推荐理由

✅ 技术亮点

  1. FFmpeg 临时目录方案: 成功解决路径空格问题
  2. 批量翻译: 35 条字幕一次性翻译,效率高
  3. 双语字幕格式: 英文+中文,清晰易读
  4. AI 语义分析: 生成有意义的章节,不是机械切分
  5. 完整的社交媒体文案: 一键生成多平台内容

改进建议

已实现的改进

  1. ✅ 文件命名使用视频 ID(避免特殊字符)
  2. ✅ 输出目录改为当前工作目录
  3. ✅ 下载进度钩子容错处理
  4. ✅ 文档更新反映实际行为

未来可能的增强

  1. 自动清理临时文件:

    • 当前保留了中间文件(clip.mp4, original_en.srt 等)
    • 可添加选项让用户选择是否保留中间文件
  2. 视频格式选项:

    • 当前固定为 mp4
    • 可支持用户选择输出格式(webm, mkv 等)
  3. 字幕样式自定义:

    • 当前固定字体大小 24、底部边距 30
    • 可添加配置文件让用户自定义
  4. 批量剪辑模式:

    • 当前一次只能剪辑一个章节
    • 可支持一次选择多个章节并行处理
  5. 章节时长配置:

    • 当前固定 2-5 分钟粒度
    • 可让用户指定目标时长(如 1 分钟、3 分钟、10 分钟)

测试数据

测试视频信息

生成的章节列表

  1. [00:00 - 02:40] AI 竞赛不是赛跑,是不同方向
  2. [02:40 - 04:40] 企业 vs 消费者:战略选择
  3. [04:40 - 07:20] AI 泡沫?投资回报需要时间
  4. [07:20 - 10:00] 就业影响:不会大规模失业
  5. [10:00 - 12:30] 税收与 UBI:解决分配问题
  6. [12:30 - 15:00] 安全风险:生物武器与网络攻击
  7. [15:00 - 18:00] 国际合作与中国竞争
  8. [18:00 - 21:00] 模型能力评估与安全测试
  9. [21:00 - 23:30] Claude 的特点与应用场景
  10. [23:30 - 25:25] 未来展望与结语

选择的片段

  • 章节: 2. 企业 vs 消费者:战略选择
  • 时间: 02:40 - 04:40
  • 时长: 2:00
  • 原始片段: 29.6 MB
  • 烧录字幕版: 30.3 MB
  • 字幕数量: 35 条
  • 文案长度: 7.5 KB

结论

经过首次完整测试和问题修复,YouTube Clipper Skill 现在可以稳定运行。所有核心功能已验证通过:

  1. ✅ 视频下载(yt-dlp)
  2. ✅ AI 章节分析(精细粒度)
  3. ✅ 视频剪辑(FFmpeg)
  4. ✅ 字幕翻译(批量处理)
  5. ✅ 字幕烧录(临时目录方案)
  6. ✅ 文案生成(多平台)

主要修复:

  • 文件命名改用视频 ID(避免特殊字符)
  • 输出目录改为当前工作目录
  • 下载进度钩子容错
  • 文档更新

Skill 已准备好供用户正式使用!