\ud83e\udd9e Nm — 媒体合成

v1.0.0

通过解析 manifest 文件,调用 FFmpeg 将 GIF、视频等多媒体素材按垂直/水平等布局合成为教程级复合视频,支持网格、画中画等排版与参数自定义。

0· 19·1 当前·1 累计
下载技能包 项目主页
最后更新
2026/4/20
0
安全扫描
VirusTotal
可疑
查看报告
OpenClaw
可疑
medium confidence
技能的 manifest 驱动 FFmpeg 合成流程与其描述基本匹配,但运行时指令允许执行 manifest 中任意预命令,且 SKILL.md 假定外部二进制(ffmpeg、yq、shell)却未在元数据中声明,此差异及可执行 manifest 指定命令是主要风险点。
评估建议
该技能确实能按声明用 FFmpeg 合成媒体,但需谨慎:manifest 格式包含 components[].requires 字段,指令会运行 shell 命令及外部工具(ffmpeg、yq)。运行前请确认 manifest 来源可信并审查任何 'requires' 命令;确保 ffmpeg 与 yq 装在受控环境或于沙箱/容器内运行。建议作者:①在元数据声明所需二进制;②限制或净化 manifest 'requires' 执行;③文档化安全验证规则。若无法信任 manifest,切勿运行将执行它的合成任务。...
详细分析 ▾
用途与能力
名称/描述(合成 GIF/视频为复合素材)与指令(解析 manifest、验证文件、运行 FFmpeg)一致,但 SKILL.md 期望命令行工具(ffmpeg、yq、bash)而技能元数据未声明所需二进制,存在不一致,应补充声明。
指令范围
运行时指令会解析用户提供的 manifest 文件并执行 components[].requires 及完整 shell ffmpeg/yq 命令,意味着 manifest 可触发任意 shell 命令(如 'requires' 条目),若未严格验证或沙箱隔离,执行代理可能运行不受信命令。
安装机制
纯指令技能,无安装规范或嵌入代码,降低安装器风险,无下载或解压步骤。
凭证需求
未请求环境变量或凭证(良好)。技能声明需配置路径 night-market.scry:gif-generation,与父插件集成合理,但应在文档中说明访问理由;未声明所需二进制(ffmpeg、yq)属比例/准确性问题。
持久化与权限
always:false 且未请求特殊权限,技能不要求持久驻留或系统级配置更改。
安全有层次,运行前请审查代码。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/4/20

媒体合成技能初始发布。 - 将 GIF、视频、图片等多媒体素材合成为教程或文档所需的复合输出。 - 支持垂直、水平、顺序、网格、叠加与画中画(PiP)布局,可自定义边距、背景等选项。 - 使用 manifest 文件定义输入组件与合成规则。 - 执行 FFmpeg 命令生成最终合成媒体。 - 提供验证、FFmpeg 命令用法及输出核查的分步指导。

可疑

安装命令

点击复制
官方npx clawhub@latest install nm-scry-media-composition
镜像加速npx clawhub@latest install nm-scry-media-composition --registry https://cn.longxiaskill.com

技能文档

Night Market 技能 — 从 claude-night-market/scry 移植。如需完整的代理、钩子与命令体验,请安装 Claude Code 插件。

目录

# Media Composition 技能 将多个媒体资源(GIF、视频、图片)合成为用于详细教程与文档的复合输出。

何时使用

  • 将多个媒体输出组合成合成图
  • 根据终端与浏览器录制创建复合演示

何时不使用

  • 无需合成的单一格式输出
  • 简单终端录制 —— 直接使用 scry:vhs-recording

概述

此技能负责将分别生成的媒体资源整合为统一的输出。它读取定义组件及其合成规则的清单文件,验证所有输入存在,并执行 FFmpeg 命令以生成最终的复合媒体。

必需的 TodoWrite 条目

- 解析合成清单文件
  • 验证所有组件输出存在
  • 确定合成布局与参数
  • 执行 FFmpeg 合成命令
  • 验证已创建合成输出文件
  • 报告合成指标(文件大小、尺寸)
验证: 运行带 --help 标志的命令以确认可用性。

清单格式

清单定义了要组合的组件及其排列方式:
# 示例清单:tutorials/mcp.manifest.yaml
name: mcp
title: "MCP Server Integration"
components:
  - type: tape
    source: mcp.tape
    output: assets/gifs/mcp-terminal.gif
  - type: playwright
    source: browser/mcp-browser.spec.ts
    output: assets/gifs/mcp-browser.gif
requires:
  - "skrills serve"
combine:
  output: assets/gifs/mcp-combined.gif
  layout: vertical
  options:
    padding: 10
    background: "#1a1a2e"
验证: 运行带 --help 标志的命令以确认可用性。

清单模式

字段类型必需描述
namestring合成的标识符
titlestring人类可读的标题
componentsarray要组合的媒体组件列表
components[].typestring源类型:tapeplaywrightstatic
components[].sourcestring源文件路径
components[].outputstring生成输出的路径
components[].requiresarray生成前需运行的命令
combine.outputstring组合输出的路径
combine.layoutstring布局模式(见下表)
combine.optionsobject布局相关选项

逐步流程

1. 解析清单文件

# 读取并验证清单结构
yq eval '.' manifest.yaml
# 提取组件输出
yq eval '.components[].output' manifest.yaml
验证: 运行带 --help 标志的命令以确认可用性。

2. 验证组件输出

# 检查所有必需文件是否存在
for output in $(yq eval '.components[].output' manifest.yaml); do
  if [[ ! -f "$output" ]]; then
    echo "ERROR: 缺少组件:$output"
    exit 1
  fi
done
验证: 运行带 --help 标志的命令以确认可用性。

3. 执行 FFmpeg 合成

根据清单中指定的布局,执行相应的 FFmpeg 命令。

4. 验证合成输出

# 验证输出存在且有内容
if [[ -f "$output" && -s "$output" ]]; then
  echo "合成成功:$output"
  ls -lh "$output"
else
  echo "ERROR: 合成失败"
  exit 1
fi
验证: 运行带 --help 标志的命令以确认可用性。

FFmpeg 合成命令

竖向堆叠

将 GIF/视频从上到下堆叠:
ffmpeg -i top.gif -i bottom.gif \
  -filter_complex "[0:v][1:v]vstack=inputs=2" \
  -y output.gif
验证: 运行带 --help 标志的命令以确认可用性。

带间距:

ffmpeg -i top.gif -i bottom.gif \
  -filter_complex "[0:v]pad=iw:ih+10:0:0:color=black[top];[top][1:v]vstack=inputs=2" \
  -y output.gif
验证: 运行带 --help 标志的命令以确认可用性。

横向堆叠

将 GIF/视频并排堆叠:
ffmpeg -i left.gif -i right.gif \
  -filter_complex "[0:v][1:v]hstack=inputs=2" \
  -y output.gif
验证: 运行带 --help 标志的命令以确认可用性。

顺序拼接

按顺序播放 GIF/视频:
# 创建拼接列表文件
cat > concat_list.txt << EOF
file 'first.gif'
file 'second.gif'
file 'third.gif'
EOF
# 拼接
ffmpeg -f concat -safe 0 -i concat_list.txt \
  -y output.gif
验证: 运行带 --help 标志的命令以确认可用性。

网格布局(2×2)

ffmpeg -i tl.gif -i tr.gif -i bl.gif -i br.gif \
  -filter_complex "[0:v][1:v]hstack=inputs=2[top];[2:v][3:v]hstack=inputs=2[bottom];[top][bottom]vstack=inputs=2" \
  -y output.gif
验证: 运行带 --help 标志的命令以确认可用性。

带背景色

ffmpeg -i top.gif -i bottom.gif \
  -filter_complex "color=c=#1a1a2e:s=800x600[bg];[bg][0:v]overlay=0:0[tmp];[tmp][1:v]overlay=0:300" \
  -y output.gif
验证: 运行带 --help 标志的命令以确认可用性。

布局选项

布局描述选项
vertical从上到下堆叠paddingbackgroundalign
horizontal从左到右堆叠paddingbackgroundalign
sequential按顺序播放transitionduration
gridN × M 网格排列rowscolspadding
overlay彼此叠加positionopacity
pip画中画cornerscalemargin

布局选项详情

选项类型默认值描述
paddingint0组件间像素间距
backgroundstring"black"背景色(十六进制或名称)
alignstring"center"对齐:left、center、right
transitionstring"none"过渡类型:fade、wipe、none
scalefloat0.25PiP 缩放因子
cornerstring"br"PiP 角:tl、tr、bl、br

合成示例

终端 + 浏览器教程

name: plugin-demo
components:
  - type: tape
    source: demo.tape
    output: terminal.gif
  - type: playwright
    source: browser.spec.ts
    output: browser.gif
combine:
  output: demo-combined.gif
  layout: vertical
  options:
    padding: 5
    background: "#0d1117"
验证: 运行带 --help 标志的命令以确认可用性。

并排对比

name: before-after
components:
  - type: static
    source: before.gif
    output: before.gif
  - type: static
    source: after.gif
    output: after.gif
combine:
  output: comparison.gif
  layout: horizontal
  options:
    padding: 10
验证: 运行带 --help 标志的命令以确认可用性。

画中画

name: pip-demo
components:
  - type: tape
    source: main.tape
    output: main.gif
  - type: playwright
    source: overlay.spec.ts
    output: overlay.gif
combine:
  output: pip-demo.gif
  layout: pip
  options:
    corner: br
    scale: 0.3
    margin: 20
验证: 运行带 --help 标志的命令以确认可用性。

退出条件

  • [ ] 清单文件成功解析
  • [ ] 所有组件输出验证为存在
  • [ ] FFmpeg 合成命令无错误执行
  • [ ] 合成输出文件存在且大小非零
  • [ ] 输出尺寸与时长已记录
  • [ ] 临时文件已清理

故障排除

常见问题

找不到命令 确保所有依赖已安装并在 PATH 中

权限错误 检查文件权限并以适当权限运行

意外行为 使用 --verbose 标志启用详细日志

数据来源ClawHub ↗ · 中文优化:龙虾技能库