mcpField
4
4k-vfx

4k-vfx

github.com/pika-labs创意与媒体41601 次安装14 周前更新
代码仓库

关于 4k-vfx

用于将视频特效修改流程映射到 Pika MCP 的 Seedance 4K 参考视频生成的技能。它要求逐帧分析画面并理解音频,再编写保留原镜头细节、按时间标注变化的提示词;生成前需用户批准提示词和费用。

主要功能

  1. 01使用 ffmpeg 提取并检查全部帧
  2. 02分析对话、音乐与音效
  3. 03撰写保留镜头细节的 Seedance 提示词
  4. 04将特效变化与时间及音频节拍对应
  5. 05生成前展示费用并等待批准

适用场景

  1. 01为原视频添加指定视觉特效
  2. 02让特效在动作或音频提示处出现
  3. 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. 视频——要进行转换的原始片段。如果用户提供的是本地文件,就上传它(步骤 1);如果提供的是公开 URL,就保留该 URL。
  2. 改动/VFX——输出中要有什么变化(例如:“在打响指时把广场变成开阔的沙漠”“让天空下雪”“让我身后的房间着火”“把我的夹克变成发光盔甲”)。

如果缺少任意一项,先询问用户,不要进行其他操作——不要自行编造改动,也不要处理无法访问的片段。收到两项内容后,用一句话说明接下来要做什么(“正在读取你片段中的每一帧,以编写打响指变沙漠的 4K 提示词……”),然后直接执行步骤 1–5,不再中途确认——但在生成前,必须停在步骤 6 的确认关卡:4K 渲染成本高且无法撤销,只有用户批准提示词和费用后才会启动。

步骤 1——上传片段(upload_asset)

必须上传实际视频——内联 base64 仅适用于很小的资源(<~3MB),因此任何实际片段都要通过预签名上传流程处理。

  1. 调用 upload_asset,并提供 filename、mime_type(mp4 使用 video/mp4)和 size_bytes(文件的字节大小)。
  2. 将原始字节 PUT 到返回的 presigned_url。
  3. 将返回的 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。**在一条消息中提供:

  1. 完整的步骤 5 提示词——逐字呈现,让用户能在花费之前检查错误细节(面部、手势、时间)。
  2. 生成方案——提供方 seedance、模型 standard、分辨率 4k,以及你从步骤 2 探测结果中选择的 aspect_ratio 和 duration。
  3. 预估费用——针对步骤 7 的 generate_reference_video 调用执行 estimate_cost,并引用结果。如果预估出错,请说明费用未知,并指出 4K standard 属于最高价位档——不要默默跳过费用数字。

然后等待。有三种结果:

  • 批准 → 不作更改,继续执行步骤 7。
  • 修改——用户更正细节或更改描述 → 更新步骤 5 的提示词(如更正内容需要,则重新读取特定画面),并重新展示确认关卡。
  • 取消 / 未回复 → 不要生成。绝不要把沉默视为批准。

只有在用户于本次会话中明确预先授权了这笔费用(“直接运行,别问”,或明确要求无需确认即可渲染的长期指示)时,才可跳过此关卡。用户提供了视频片段和更改要求并不代表已预先授权——那只是阶段 0 的输入。

步骤 7 — 生成(Seedance 4K 视频参考生成)(generate_reference_video)

使用准确的 4K 方案调用 generate_reference_video:

  • provider:seedance
  • seedance_model:standard——4k 必须使用此模型(fast/mini 最高仅支持 720p)。
  • resolution:4k
  • reference_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)。

评论

支持 Markdown