Communitygithub.com

shubham001312/fish-video-skill

制作一个即用型的高质量短视频、Reel、TikTok、YouTube 或 LinkedIn 视频,覆盖任何主题。适用于需要视频、解说、宣传片、产品/应用演示、录屏教程、激励类短视频,或参考链接中“类似这样的视频”的场景。

fish-video-skill 是什么?

Fish Video Skill v2 是一个专为 AI 代理(如 Claude Code、Cursor)设计的高级技能,用于制作达到专业水准的短视频。它通过一个严格的一次性采访(询问主题、平台、风格、颜色、语音、音乐、音效、素材、录屏和 API 密钥等 30 多个问题)开始,之后不再提问,直到最终审核。该技能会研究趋势和事实、拆解参考视频、收集经过授权的真实素材(从 Pexels、Pixabay、Freesound 等来源)、录制屏幕(支持焦点缩放和点击音效),并利用确定性运动图形引擎(如纸拼贴、动态文字、霓虹图、发光隐喻、白板动画)进行渲染。最终输出包含视频、缩略图、标题、描述、标签和致谢信息,并在获得许可后清理项目文件。它支持所有主流短视频平台(YouTube Shorts、Instagram Reels、TikTok、LinkedIn Video 等),内置质量保证与自我审查循环,确保每秒钟都有新内容,使用真实立体素材,并保持语音与音乐背景的平衡。

兼容平台~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/shubham001312/imutechz-skills/tree/HEAD/skills/fish-video-skill

在你喜欢的 AI 中提问

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

文档

Fish Video Skill v2

你从一次对话中制作一个视频。其质量必须达到 参考拆解 中分析的顶级短视频的水平:

  • 屏幕上大约每 1 秒出现新内容
  • 具有深度感的真实素材(纹理、接触阴影、发光)
  • 3 倍的字词对比度
  • 物体作为转场元素的过渡效果
  • 每次移动前都要有快速的 swish 音效,揭示画面时要有渐强的 risers,闪切时要有 impact 音效
  • 与清晰的音乐背景相平衡的语音

即使 QA 通过,一个带有通用语音的幻灯片也是失败的。

路由器:进入任务时加载指南

只阅读当前步骤需要的内容:

不可协商的工作流程

0 doctor ─▶ 1 采访(所有问题,一次) ─▶ 确认 ─▶ 2 研究 + 趋势 + 参考(并行)
  ─▶ 3 素材 + 屏幕录制 + 语音(并行) ─▶ 4 故事板(你写出每一个字) ─▶ 门控
  ─▶ 5 静态画面(外观) ─▶ 6 渲染 ─▶ 7 QA + 审查循环(修复,重新渲染,重复) ─▶ 8 打包 ─▶ 9 最终审核 ─▶ 10 清理(请求许可)

规则:

  • 一次采访,在开始时。 所有需要用户的问题在第 1 步中提出,包括语音和语调、颜色、屏幕步骤、API 密钥(以及获取每个密钥的方法)和可选安装的额外组件。在 fishvideo interview <dir> --confirm 之后,你不再提问。根据答案和风格配方进行决策。仅在以下情况下再次联系用户:

    • (a) 他们在 checkpoints 中选择的可选暂停点
    • (b) 他们必须执行的桌面录制;他们在采访中已同意,你准确告诉他们何时开始
    • (c) 最终审核
    • (d) 清理许可

    如果用户后来说了不同的内容,遵循用户的指令。

  • 在采访确认之前,绝不编写脚本。 fishvideo script、all 和完整 render 命令拒绝执行,直到 fishvideo gate 通过。

  • 绝不输出模板文本。 脚手架是待办事项的骨架。你为这个视频重新编写屏幕上的每个字和每一句旁白,因此门控会阻止待办事项、v1 固定短语(“X,解释”、“在60秒内”、“感谢观看”)以及从 examples/ 复制的任何行。示例展示结构,绝不展示内容。

  • 解说视频要有图表。 任何 goal: explain 的视频都需要至少一个 diagram、whiteboard、neonline 或 split 揭示机制场景。仅罗列要点不是解说。

第 0 步:诊断

首次使用时,设置步骤在 README.md 中:npm install、创建 venv、pip install -r requirements.txt。然后运行:

.venv/Scripts/python scripts/fishvideo.py doctor --keys      # Windows(macOS/Linux:.venv/bin/python)

记录缺少的密钥和额外组件。你将在采访的第 8 轮中询问这些。

为获得最佳效果进行设置(执行此操作,不要跳过):

  • 自行安装额外组件。 如果 doctor 显示缺少某个额外组件,将其安装到技能的 venv 中,无需用户操作:pip install "rembg[cpu]"(抠图)、pip install kokoro soundfile(自然本地语音)和 pip install faster-whisper(对齐用户自己的配音)。同时运行 fishvideo assets sfx-pack 一次(如果音效库缺失)。用一句话告知用户你在安装什么以及为什么。仅跳过用户在第 8 轮中拒绝的额外组件。
  • 请求 API 密钥。 它们是 可选 的:不使用它们,通过免费备用方案一切都能正常工作。但它们能带来最佳效果:ElevenLabs 提供最自然的语音,Pexels/Pixabay 提供最多的库存照片和视频,Freesound 提供最多的音效,YouTube Data API 提供趋势图表。在第 8 轮中,仅询问对这个视频重要的密钥,说明如何获取每个密钥(doctor --keys 中有免费注册链接),并在不施加压力的情况下接受“否”或“稍后”。仅在采访中执行此操作,绝不要在创作开始之后。

第 1 步:采访(严格)

fishvideo new projects/<slug> --prompt "<用户的请求,逐字原文>"
fishvideo interview projects/<slug>            # JSON:开放性问题,按 8 轮分组

问题库在 config/interview.yaml。它有 8 轮,约 30 个问题:

轮次覆盖内容
1目的
2形状和风格
3颜色、字体、纹理
4语音、表达方式、音乐、音效
5真实素材和屏幕录制
6内容、事实、行动号召、语言
7字幕、缩略图、审批
8API 密钥和额外组件

仅一个词或一个领域? 在第 1 轮之前,生成 5 个热门角度:yt suggest、yt search --recent-days 30 和 trends(俳句子代理,并行),遵循 主题到视频。将它们作为 topic 问题提供。选中的角度将驱动后续所有决策。

提问方式:

  • 每次 AskUserQuestion 调用只问一轮(最多 4 个问题),使用列出的选项。推荐选项优先。始终可用“其他”。
  • 自由文本问题(free_text: true)在同一轮的普通消息中提出,与该轮的多项选择题一起。
  • 仅当提示已明确回答了某个问题时(from_prompt 显示检测到的内容),才跳过该问题,并仍记录答案。
  • 记录每个答案:fishvideo interview <dir> --set style=paper-collage --set platforms='["shorts"]'。答案映射到 brief.yaml 中:调色板对应 brand.colors,情绪对应评分和节奏,语音和表达方式对应语音配置和后处理链,风格对应纹理、节奏和主题。
  • 语音: 在第 4 轮和第 6 轮之后(一旦语言和表达方式确定),运行 fishvideo voices <dir> --audition。向用户提供 build/auditions/ 中的文件路径,让他们播放并选择。这仍然是采访的一部分。
  • 密钥: 仅提供与他们答案相关的缺失密钥。说明如何获取每个密钥(问题库中的文本)以及没有密钥时会发生什么。如果他们粘贴密钥,使用 --set keys_paste=... 记录。密钥将保存到技能的 gitignored 的 .env 文件中,绝不会被回显、记录或提交。如果他们选择了额外组件,立即安装到 venv 中(pip install "rembg[cpu]"、kokoro soundfile、faster-whisper)。
  • 最后,向用户复述 fishvideo interview <dir> --summary 的输出。请求一个简单的“是,继续”,然后运行 --confirm。

第 2 步:研究、趋势和参考(并行运行)

将这些作为并行子代理生成。模型路由:俳句 用于抓取和查找扫描,十四行诗 用于分析和例行代码,你(颂歌) 负责脚本、故事板、设计判断和最终审核。为每个代理提供项目路径和它必须生成的确切输出文件。子代理可能无法写入报告文件;这时它们返回文本,你将其保存。

任务命令代理
事实和来源网页搜索,然后 fishvideo research <dir> --url ... → research/facts.md俳句
趋势fishvideo trends <dir> --topic "<主题>" --region <IN/US> → research/trends.md(当前排名靠前的标题公式、标签、钩子、理想长度)俳句
YouTube 查询fishvideo yt search "<q>" -n 20 [--recent-days 30]、yt info、yt subs、yt suggest俳句
参考拆解(用户给出的每个链接,以及所选风格中 1–2 个热门示例)fishvideo yt download <url> --purpose reference --project <dir>,然后 fishvideo dissect <dir>/reference/<file>.mp4 --out <dir>/reference/dissect --fps 4 [--vtt subs.vtt]。阅读 每一份 表格、频谱图和 timeline.md,然后按照 参考视频分析 的九个部分编写 reference/analysis.md十四行诗(视觉)

从拆解中提取数据:变化率、swish 时机和电平、语音与背景音乐的音量比、音量压缩深度、响度、字幕样式。将它们写入 brief.yaml → match:,以便故事板和混音能够遵循。复制技巧,绝不复制内容。

第 3 步:素材、屏幕和语音(并行运行)

真实素材(当 assets.policy 为 mixed 时):

  • 搜索:fishvideo assets search <dir> "<名词>" --kind photo|video|music|sfx [--providers wikimedia,pexels]。查看 assets/_candidates/ 中的预览文件。
  • 下载你选择的素材:fishvideo assets get <dir> <ids>。每个文件及其许可信息都会记录到 assets/credits.json 中。
  • 制作抠图:fishvideo assets cutout in.jpg out.png(使用 isnet-general-use 模型的 rembg;绝不使用非商业默认模型)。
  • 准备 b 卷素材:fishvideo assets clip <dir> <file> <clip_id> --start S --dur S 为 footage 场景提供帧。
  • 获取 CC-BY 许可的 YouTube 片段:fishvideo yt clip <url> <start> <end> <dest> --project <dir>。它拒绝非 CC 视频。
  • 允许的许可:CC0、PD、Pexels/Pixabay 许可、CC-BY 和 CC-BY-SA(需署名)。绝不允许 NC 或 ND。绝不允许非 CC 的 YouTube 视频、参考视频的素材、你重新绘制的标志,或误导性使用真实人物的肖像。

屏幕:

  • website:列出 captures: 下的拍摄计划,运行 fishvideo capture <dir>。它将在虚拟时间内以只读方式录制。
  • desktop:fishvideo screenrec record <dir> <shot> --seconds N [--window "标题"] [--scale 2]。在开始之前,准确告知用户需要执行哪些步骤。F8 添加标记,F9 停止。
  • files:fishvideo screenrec import <dir> <shot> recording.mp4。

以上三种方式都产生相同的捕获文件夹。tour 场景(frame: inset)会添加发光光标、点击波纹和点击音效、1.6–2 倍的光标缩放、聚光灯和 STEP 卡片。以 2 倍缩放录制,以确保缩放时保持清晰。

音乐:

  • 库音轨:assets search <dir> "<brief.music.search>" --kind music,然后 assets get,将文件放入 assets/music/。
  • 或保留合成的配乐。设置 music.source: synth 来强制使用合成音乐。

音效: 运行 fishvideo assets sfx-pack 一次(Kenney CC0)。通过 assets search --kind sfx(Freesound CC0)添加更多音效到 assets/sfx/<cue-type>/。

语音: 编写旁白(第 4 步),然后运行 fishvideo voice <dir>。重新运行故事板,以便场景根据实际音频剪辑重新计时。如果用户录制了自己的旁白,运行 fishvideo voiceover <dir> recording.wav 代替:它将使用 faster-whisper 将录音与脚本对齐,并按行剪切。

情绪: 为每个场景分配一个 mood:(curious、tense、urgent、excited、warm、serious、reflective、triumphant、neutral)。它会影响每行的速度和音调,以及在 ElevenLabs 上的风格。标点符号在所有引擎上塑造表达方式:... 表示停顿,? 和 ! 提升语调,短句更具冲击力。在不同节拍间变化情绪:40 秒内单一的平淡语调就是“通用语音”的问题。行内的静默部分会自动剪切(pacing.max_word_gap)。

音乐时机: 对于库音轨,运行 fishvideo beats <track>。将故事板 bpm 设置为音轨的节奏,并设置 music.offset,使节拍或高潮落在你最大的揭示画面上。

屏幕录制: 运行 fishvideo screenrec tighten <dir> <shot> 来加速空闲时段。绝不能让观众等待加载转圈。

第 4 步:故事板(你编写它)

运行 fishvideo script <dir>。它根据风格配方(config/styles.yaml、风格配方)构建一个充满待办事项的节拍骨架 storyboard.yaml。其时间是占位符。然后你按照以下顺序正确地编写它:

  1. 替换每一个待办事项:复制内容、参数和旁白。场景目录 顶部的表格列出了必需的参数。
  2. 编写 brief.publish 并检查采访无法填写的字段:title、facts({text, value, source})、sources、cta。
  3. 运行 fishvideo voice <dir>,然后运行 fishvideo storyboard <dir>。只有到此时场景长度才是真实的。任何以节拍(at)计时的内容都要在此步骤之后根据口语单词进行设置。
  4. 运行 fishvideo gate <dir>。

多样性。 在短视频中绝不连续使用两次相同的场景类型,也绝不连续使用三个统计数据或图表。真实的照片绝不能未经处理就出现。使用 assets cutout 和后期处理,因为一个沉闷的矩形会破坏画面。

一个核心角色。 在编写任何节拍之前,选择一个重复出现的物体或形象:一个手机、一个盒子、一个点、一个字母。视频中发生的所有事情都围绕它展开,它出现在每一个场景中(anchor / carry,以及 match 过渡)。这是热门视频与生成的幻灯片之间最明显的区别:参见 趋势分析。

图表要演进。 保持一个持续存在的元素,让它重新标记、成长或移动(带有 follow 的 neonline、带有 morph 的 diagram、摄像机推进)。不要组装不相关的静态节点。

节拍。 将想法分解为 4–8 个有意义的节拍:钩子、主张、人性化时刻、概念、升级、转折、回报、结尾。每个节拍使用一个场景,并为屏幕录制重复节拍……

[已截断以进行翻译]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能