Communitygithub.com

视频分析

使用 ffmpeg 和本地 whisper.cpp 将本地视频或会议录制文件转换为带时间戳的联系表(contact sheets)和转录文本,也可使用 Zoom 或 Teams 自带的转录文件。当用户要求查看、观看、转录、总结或分析视频或录制文件(.mp4、.mov、.webm、.mkv、.m4v、.m4a),包括 Zoom 会议和屏幕录制,或输入 /configure 更改技能设置时使用。录制文件始终保留在本地机器上。

视频分析 是什么?

该“视频分析”技能使 AI 代理能够完全在本地处理视频和音频录制文件,无需将任何媒体文件上传到云端。它利用 ffmpeg 提取帧和音频,并使用本地运行的 whisper.cpp 进行语音转文本转录。主要输出包括一个带时间戳的联系表图像网格(contact sheet)、一份完整的时间戳转录文本以及提取出的单帧图像,所有这些都保存在一个 `_video/` 目录中。它支持常见的视频格式,并能利用 Zoom 或 Teams 录制文件旁边已有的 `.vtt` 转录文件,从而保留说话人名称,避免重复转录。该技能会检查重复处理,确保相同输入不会重复工作。此外,它提供一个 `/configure` 网页界面,让用户无需手动编辑 JSON 即可调整设置(如帧间隔、场景检测阈值、Whisper 模型和语言等),从而实现高度定制化的视频分析工作流程。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/richardjahnke-eng/ai-video-skill/tree/main

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

分析视频

在本机上处理文件。不要上传视频或其音频,也不要将其中任何一个发送到云端转录服务。

运行

从打开的项目的根目录执行命令。输出将放入该目录下的 _video/ 中,这使其保留在代理沙箱内,不进入共享文件夹。通过绝对路径运行此技能的入口脚本。

macOS 和 Linux:

/absolute/path/to/analyze-video/scripts/analyze_video "/absolute/path/to/video.mp4"

Windows:

powershell -NoProfile -ExecutionPolicy Bypass -File \absolute\path\to\analyze-video\scripts\analyze_video.ps1 "C:\path\to\video.mp4"

从目录列表获取视频路径并完全按原样传递。录制文件名可能包含看起来像普通空格但实际上不是的字符。

Zoom 的本地录制文件位于 ~/Documents/Zoom/<日期时间 会议名称>/,通常为 zoom_0.mp4,以及一个只有音频的 audio_only.m4a。除非用户要求音频文件,否则使用 .mp4。仅音频文件将生成转录文本,不生成联系表。

该命令会打印 index.md 的路径。该文件夹包含:

  • index.md:时长、帧间隔以及联系表列表
  • transcript.md:带时间戳的转录文本,或提示无音频的说明
  • sheets/sheet_NNN.jpg:联系表
  • frames/f_NNNN.jpg:已带有时间戳的单独帧
  • manifest.json:源文件指纹和所使用的设置

如果 .vtt 转录文件位于录制文件旁边(Zoom 云端录制下载时附带 …_Recording.transcript.vtt,Teams 为 <名称>.vtt),则会使用该文件而非 Whisper,并保留说话人名称。传递 --whisper 可强制在本地转录,或传递 --transcript /path/to/file.vtt 指定其他名称的转录文件。

对同一文件使用相同设置再次运行时,会输出“已处理”(already processed) 并不会重做。当使用不同的间隔、模型、语言、场景设置、提示、帧上限、跳帧选项或转录文件时,会重新处理。

如果命令失败,则停止并输出其反馈。不要自行采样帧作为替代。如果输出提示需要设置,或 Whisper 模型下载被阻止,请将打印的设置命令提供给用户。他们在终端中运行一次。仅当用户要求并批准在沙箱外运行时,你才能自行运行该命令。

读取结果

  1. 读取 index.md。
  2. 完整读取 transcript.md。
  3. 读取每张联系表图像。
  4. 仅当某个单元格不可读时才打开 frames/ 下的一个文件。

如果 index.md 表明帧被跳过,则读取 transcript.md 并停止。没有联系表。

配置

当用户输入 /configure,或要求配置或更改此技能的设置时,打开设置页面。在此之前不要自行编辑任何配置文件。

  1. 通过其绝对路径运行此技能的 scripts/configure。在 Windows 上,使用该技能的 Python 运行 python scripts/configure.py。
  2. 它会打印一行:configure: http://127.0.0.1:<端口>/。在 Cursor 浏览器中打开该 URL,以便用户看到页面。
  3. 让服务器保持运行。该页面会在技能文件夹中写入 config.local.json。下次处理视频时将使用这些设置。

当用户想要不同的设置时

标志会覆盖该次运行的 config.json。默认情况下,每 30 秒并在每次场景变化(新幻灯片或窗口)时截取一帧,长录制文件上限为 96 帧(8 张联系表)。对于短录制文件要更详细:

/absolute/path/to/analyze-video/scripts/analyze_video "/absolute/path/to/video.mp4" --interval 5 --max-frames 0

在 Windows 上,将相同的标志传递给 scripts/analyze_video.ps1。

仅当这些名称已出现在任务中时,才传递 --prompt "此视频已知术语"。不要凭空捏造提示。--max-frames 0 移除上限。仅当用户要求转录或总结,而不要求观看或查看画面时,才传递 --skip-frames。

其他标志:--language en、--model medium、--no-scene、--scene-threshold 0.2、--min-scene-gap 1、--sheet-cols、--sheet-rows、--frame-width、--keep-audio、--output-root beside(视频旁边)、--config /path/to/config.json。

默认值和完整键列表位于此技能文件夹中的 config.json 和 README.md 中。仅英文模型(medium.en 及其他 *.en 名称)不能使用 "language": "auto"。

相关技能