关于 4k-vfx
用于将视频特效修改流程映射到 Pika MCP 的 Seedance 4K 参考视频生成的技能。它要求逐帧分析画面并理解音频,再编写保留原镜头细节、按时间标注变化的提示词;生成前需用户批准提示词和费用。
主要功能
- 01使用 ffmpeg 提取并检查全部帧
- 02分析对话、音乐与音效
- 03撰写保留镜头细节的 Seedance 提示词
- 04将特效变化与时间及音频节拍对应
- 05生成前展示费用并等待批准
适用场景
- 01为原视频添加指定视觉特效
- 02让特效在动作或音频提示处出现
- 03在生成前核对镜头描述与费用
MCP 相关
通过 Pika MCP 调用媒体分析、音频转录、费用估算和 Seedance 参考视频生成等工具。视频帧提取与拼图由本地 ffmpeg 完成。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ pika-labs/ pika-plugins --skill 4k-vfx安装后在 Claude Code 中输入/4k-vfx确认已加载。
详细介绍
4k-vfx
将视频到视频的 VFX 效果映射到 Pika MCP 的 Seedance 4K 参考视频生成。用户提供一个片段和想要的改动;你要读取每一帧(在本地用 ffmpeg 提取并拼成联系表),并理解音频(对白、音乐、音效和环境音),撰写忠实于 Seedance 的提示词,锁定原始内容(面部、手势、镜头运动),并将改动精确设定到对应节拍,然后以 4K 重新渲染同一个镜头,并在其中加入 VFX。每次运行会针对一项指定改动生成一个 4K 片段。
工作原理——为什么读取每一帧(以及音频)是关键步骤(切勿跳过读取流程)
Seedance 将参考视频视为运动/风格锚点,而非像素锁定的底片——它不会逐帧复制输入内容,而是根据提示词重新生成镜头。因此,忠实度取决于提示词:提示词越详尽地描述原始内容(主体身份、具体手势、镜头运动、构图、灯光、色彩、服装)和音频(对白与口型同步、音乐/音效节拍),4K 输出就越像是在同一个镜头上叠加了所需改动。**读取每一帧——而非抽样读取——才能构建这份详尽描述:**你要在本地用 ffmpeg 提取所有帧,将每 25 帧拼成一张联系表(5×5),并分析每张联系表,以便根据完整时间线而非少数静帧来编写提示词。跳过读取(或只读取部分帧),输出就会偏离——变成不同的面孔、不同的镜头运动、不同的房间,还会错过动作节拍。读取流程——所有帧加上音频——就是这项技能的核心。
前提条件
需要有可用的 pika MCP,并且运行环境中有本地 ffmpeg(用于提取每一帧并生成联系表)。用户需提供两项输入:(1)一个视频片段(本地文件或公开 URL)和**(2)想要做出的 VFX 改动**。使用的工具:upload_asset、probe_media、analyze_media、transcribe_audio、estimate_cost、generate_reference_video、task_status(帧提取和拼接在本地用 ffmpeg 完成,不使用 MCP 工具)。
阶段 0——收集输入(先确认这些)
生成前,必须准确获得两项内容:
- 视频——要进行转换的原始片段。如果用户提供的是本地文件,就上传它(步骤 1);如果提供的是公开 URL,就保留该 URL。
- 改动/VFX——输出中要有什么变化(例如:“在打响指时把广场变成开阔的沙漠”“让天空下雪”“让我身后的房间着火”“把我的夹克变成发光盔甲”)。
如果缺少任意一项,先询问用户,不要进行其他操作——不要自行编造改动,也不要处理无法访问的片段。收到两项内容后,用一句话说明接下来要做什么(“正在读取你片段中的每一帧,以编写打响指变沙漠的 4K 提示词……”),然后直接执行步骤 1–5,不再中途确认——但在生成前,必须停在步骤 6 的确认关卡:4K 渲染成本高且无法撤销,只有用户批准提示词和费用后才会启动。
步骤 1——上传片段(upload_asset)
必须上传实际视频——内联 base64 仅适用于很小的资源(<~3MB),因此任何实际片段都要通过预签名上传流程处理。
- 调用
upload_asset,并提供filename、mime_type(mp4 使用video/mp4)和size_bytes(文件的字节大小)。 - 将原始字节 PUT 到返回的
presigned_url。 - 将返回的
public_url保存到state.clip_url。
如果用户已经提供了公开 URL,就跳过此步骤,并将其设为 state.clip_url。
步骤 2——探测媒体信息(probe_media)
对 state.clip_url 调用 probe_media,读取时长、fps、尺寸和宽高比。使用这些信息:(a) 检查步骤 3 中是否提取了所有帧(时长 × fps ≈ 总帧数 ≈ 25 × 联系表数量);(b) 在此处选择与源视频匹配的输出 aspect_ratio 和 duration——步骤 6 的确认关卡会向用户说明这些选项,步骤 7 将使用这些选项启动生成。
第 3 步 — 使用 ffmpeg 在本地提取每一帧,并拼成联系表
读取完整视频,而不是抽样。使用本地 ffmpeg 按源帧率提取每一帧(不丢帧,不例外),然后将其拼成清晰易读的联系表,每张 25 帧(5×5 网格),以便每次 analyze_media 调用都能一次覆盖连续的 25 帧。
在相对工作目录中操作(不要使用绝对系统临时路径):
mkdir -p frames sheets
ffmpeg -i INPUT -vsync 0 frames/f_%05d.png # every frame, no drops
然后构建每张 25 帧(5×5)的联系表,将每帧缩小到适合联系表阅读的尺寸,并在每个图块上标注帧索引:
ffmpeg -i INPUT -vf "scale=480:-1,drawtext=text='%{n}':x=4:y=4:fontsize=20:fontcolor=yellow:box=1:[email protected],tile=5x5" sheets/sheet_%03d.png
drawtext=text='%{n}' 会在每个图块上标注帧索引,以便分析时引用确切帧;tile=5x5 会将连续的 25 帧编为一张联系表。如果本地 ffmpeg 构建版本不支持 drawtext,则改用纯 scale=480:-1,tile=5x5。INPUT 是本地视频片段(或 URL 的本地副本)。确认联系表数量与第 2 步的探测结果相符——每一帧都必须出现在联系表中,不得例外。
第 4 步 — 阅读每张联系表并理解音频(upload_asset、analyze_media、transcribe_audio)
这是确保保真度的步骤,包含两个必需部分:阅读所有画面和理解音频。两者缺一不可。
4a — 阅读所有画面(每张联系表)
对于第 3 步生成的每一张联系表(涵盖全部联系表——每一帧都在其中,不得例外):使用 upload_asset 上传联系表(它们是图像,因此需上传以获取 URL),然后对该联系表 URL 调用 analyze_media,并使用 query 读取这 25 帧的完整变化过程,提取提示词必须准确保留的所有内容:
- 主体 / 身份 — 画面中是谁 / 什么;面部、头发、体型、显著特征。
- 精确动作与手势 — 主体按节拍做了什么,并引用标注的帧索引(例如:“大约在第 0048 帧抬起右手,大约在第 0072 帧打响指”)。
- 镜头运动 — 固定 / 摇摄 / 推近 / 手持 / 环绕,以及运动发生的时间。
- 构图 — 景别(特写 / 中景 / 远景)、主体位置、头顶留白。
- 光线 — 方向、硬度、色温、一天中的时段。
- 色彩 — 主色调、氛围。
- 服装 / 道具 / 场景 — 衣着、物体、背景。
结合所有联系表的读图结果,理解从头到尾的完整时间线,而不只是中间抽取的片段。
4b — 理解音频(必需,不只是语音)
始终读取音频——这是必需的,不可省略。分两遍处理:
- 使用
transcribe_audio获取语音 + 时间戳(说了什么以及何时说),以便提示词保留对白和口型同步节拍。 - 对音频(或视频 URL)使用
analyze_media,以理解非语音音频,包括音乐、音效、环境声、基调和节奏 / 节拍。
在适当之处将音频理解融入提示词——如果有人说话,就保留对白和口型同步;如果 VFX 变化应落在音乐或声音节拍上(例如打响指、撞击、重拍),就将其时间安排与音频节拍 / 声音提示同步,而不是只给出一个时间戳。
将全帧画面分析结果和音频分析结果整合为对原始内容的准确描述——这份描述是第 5 步的原始素材。
步骤 5 — 编写 Seedance 提示词(创作步骤,绝对不要跳过)
撰写一条提示词 = 忠实、完整地描述原始内容(锁定元素) + 用户要求的更改,并标注时间码 + 通过 @Video1 标记引用输入视频。务必详尽:你在步骤 4 中读取的每个细节,只要有所遗漏,Seedance 就可以自由更改。
模板 — 根据步骤 4 的读取结果填写 [SLOTS]:
Re-render this exact shot @Video1 in cinematic 4K. LOCK the original: [SUBJECT/IDENTITY — face, hair, build, wardrobe], performing [EXACT GESTURES, beat by beat]. Keep the SAME camera move ([CAMERA: static / pan / push-in / handheld], [timing]), the SAME framing ([SHOT SIZE + subject position]), the SAME lighting ([direction, hardness, color temp, time of day]) and the SAME palette ([dominant colors / mood]). CHANGE: [the VFX], time-coded — at [t0]–[t1]s [what the scene looks like before the change], then at [t2]s [the change triggers / VFX appears] and [how the scene reads after]. Everything not described by the change stays identical to @Video1. Photorealistic, high detail, consistent identity throughout.
为更改标注时间码,让 Seedance 知道它相对于锁定动作何时发生(例如:“在 0–3s,广场保持不变,同时主体举起手;在 3s 手指打响时,广场渐渐变成一片开阔的沙漠,沙地和热浪取代建筑,而主体、镜头运动和构图保持不变。”)。时间码更改描述越有力、越具体,Seedance 就越不容易忽略它。
步骤 6 — 确认关卡(estimate_cost)——生成前必须执行
4K 渲染是昂贵的步骤,一旦启动就无法撤销。**未经用户在本次会话中明确批准,绝不要调用 generate_reference_video。**在一条消息中提供:
- 完整的步骤 5 提示词——逐字呈现,让用户能在花费之前检查错误细节(面部、手势、时间)。
- 生成方案——提供方
seedance、模型standard、分辨率4k,以及你从步骤 2 探测结果中选择的aspect_ratio和duration。 - 预估费用——针对步骤 7 的
generate_reference_video调用执行estimate_cost,并引用结果。如果预估出错,请说明费用未知,并指出 4K standard 属于最高价位档——不要默默跳过费用数字。
然后等待。有三种结果:
- 批准 → 不作更改,继续执行步骤 7。
- 修改——用户更正细节或更改描述 → 更新步骤 5 的提示词(如更正内容需要,则重新读取特定画面),并重新展示确认关卡。
- 取消 / 未回复 → 不要生成。绝不要把沉默视为批准。
只有在用户于本次会话中明确预先授权了这笔费用(“直接运行,别问”,或明确要求无需确认即可渲染的长期指示)时,才可跳过此关卡。用户提供了视频片段和更改要求并不代表已预先授权——那只是阶段 0 的输入。
步骤 7 — 生成(Seedance 4K 视频参考生成)(generate_reference_video)
使用准确的 4K 方案调用 generate_reference_video:
provider:seedanceseedance_model:standard——4k 必须使用此模型(fast/mini 最高仅支持 720p)。resolution:4kreference_videos:[state.clip_url]——将原始视频作为动作 / 风格锚点(Seedance 最多接受 3 个视频)。reference_images:可选——风格 / 生物 / 身份锚点(例如生成的参考图),仅在有此类图像时使用。prompt:步骤 5 的提示词(使用@Video1标记引用输入视频;长度不限,因此应详尽描述)。aspect_ratio:auto(或与步骤 2 中的源视频相匹配)。duration:与源视频时长一致,或将auto_duration设为true。
不要传入 negative_prompt(seedance 不支持,调用会被拒绝),也不要传入任何 fps 参数(此参数不存在)。
步骤 8 — 交付
如果调用直接返回结果,你就会得到 4K 视频 URL。如果返回 { task_id, status: running/background },则紧密循环调用 task_status(task_id),直到状态变为 completed / failed / cancelled。完成后,将4K 视频 URL返回给用户。注意:输出 CDN 可能会阻止会话内下载,因此应直接交付 URL,而不要尝试在本地获取视频字节。
失败模式
| 症状 | 原因 → 解决方法 |
|---|---|
| 视频片段过长 / 过大 | 大文件仍可上传;如果 Seedance 因时长而拒绝,请将源素材裁剪到关键片段,或设置 auto_duration: true 并匹配较短的 duration。 |
| 分析中未找到人脸 / 主体 | 图集可能未能清晰显示主体——针对主体可见的画面所在的特定图集重新运行 analyze_media(使用带标记的帧索引),或重新生成图集且不缩小尺寸,以保留细节。不要改用抽样提取——每一帧都必须保留在图集中。 |
缺少 ffmpeg / drawtext 不可用 | 运行环境需要本地安装 ffmpeg;如果构建中缺少 drawtext 滤镜,则退回到纯 scale=480:-1,tile=5x5(图集不带标记索引——但仍会读取每一帧)。 |
| 身份 / 镜头偏移(输出中的人脸、房间或摄像机运动不同) | 提示词描述不够详尽。返回步骤 4–5,根据图集分析结果补充缺失的锁定细节(进一步描述面部、手势、摄像机运动、光线)——Seedance 只会保留提示词中明确写出的内容。重新渲染 = 新费用:再次渲染前,使用修订后的提示词重新通过步骤 6 的审核关卡。 |
| 4k 被拒绝 / 输出分辨率降低 | 确认 seedance_model: standard(fast/mini 最高仅支持 720p)且 resolution: 4k。如果错误参数的调用已经完成(并已收费),修正后的调用属于第二次渲染——再次渲染前,重新通过步骤 6 的审核关卡;如果调用被直接拒绝(未收费),则可在原有批准下重新发起修正后的调用。 |
| 未保留语音 / 音频,或变化不同步 | 同时运行 transcribe_audio(语音 + 时间信息)和 analyze_media 分析音频(音乐 / 音效 / 环境音),然后在提示词中描述对白 + 唇部动作节拍,并将带时间码的变化锚定到正确的音频提示 / 节拍上,确保重新渲染后仍保持同步。 |
| Seedance 忽略请求的变化 | 强化步骤 5 中带时间码的变化描述——写得更具体,并明确锚定时间(“在 N 秒时触发变化”)。修订后的提示词是全新的、从未获批的提示词,重新渲染也会产生新费用:再次渲染前,重新通过步骤 6 的审核关卡。 |
| 任务运行很久后失败 | 如果运行了几分钟才失败,说明内容已通过安全审核——失败是由基础设施引起的;重新发起相同调用即可(用户在步骤 6 的批准涵盖重试相同且已获批准的调用——无需重新审核)。 |
一句话回顾
使用 ffmpeg 在本地提取每一帧 → 将帧拼成每张 25 帧(5×5)的联系表并分析每张图集 → 理解音频(转录语音 + 分析音乐 / 音效 / 环境音)→ 编写详尽且忠实于 Seedance 的提示词,锁定原始内容并将变化的时间码锚定到正确的音频节拍 → 确认关卡:展示提示词 + 配方 + estimate_cost 并等待批准 → 通过 generate_reference_video 以 4K 重新渲染相同镜头(seedance / standard / 4k,原始视频作为 reference_videos,提示词中使用 @Video1,不使用 negative_prompt)。