video-transitions 是一个视频处理技能,用途是在两个视频片段之间加入有意为之、肉眼可见的转场效果。它本质上就是 ffmpeg 的 xfade 滤镜,文档明确说明没有 CLI 命令对其进行封装,因为它本身只是一行命令,只有需要唯一代码的操作才会被封装成命令,因此直接使用给出的配方即可。
【用途与适用场景】 该技能适用于需要在两个镜头(两个片段)之间做出可见转场的场景,例如擦除、溶解、像素化等效果。文档还帮助区分了几种容易混淆的需求:如果需要一个感觉突兀但不应该有可见效果的剪辑点,那需要的是 split edit(分离剪辑)而不是转场,做法是在 EDL 中用 audio_lead 错开声音和画面;用溶解来软化生硬的对话剪辑是典型的错误做法。如果需要无缝拼接、不产生可见效果(隐藏硬切),应使用已有的 splice 命令(uv run video-agent splice a.mp4 b.mp4 -o out.mp4),它是一个固定的 0.04 秒交叉淡化。如果需要对画面本身施加效果(烟雾、重新着色、改变风格),则应使用 grok-video-edit 技能。
【主要能力与转场类型】 xfade 通过将片段 A 的结尾与片段 B 的开头重叠来工作。转场起始位置(offset)在合并时间线上的位置 = A 的时长 − 转场时长。输出总时长 = dur_a + dur_b − duration。文档列出了可用的转场类型:fade、fadeblack、fadewhite、dissolve、pixelize、wipeleft / wiperight / wipeup / wipedown、slideleft / slideright / slideup / slidedown、circleopen / circleclose、radial、smoothleft / smoothright、diagtl / diagtr / diagbl / diagbr、squeezeh / squeezev。完整列表可通过 ffmpeg -h filter=xfade 查看。
【使用方式】 文档给出的配方为:第一步用 uv run video-agent info a.mp4 获取片段 A 的真实时长(阅读 duration 行,例如 4.000s),offset 依赖于此,不能猜测。第二步 offset = dur_a - duration(例如 4.000 - 0.6 = 3.4),然后执行 ffmpeg 命令,使用 -filter_complex 组合 [0:v][1:v]xfade=transition=wipeleft:duration=0.6:offset=3.4[v] 以及 [0:a][1:a]acrossfade=d=0.6:c1=tri:c2=tri[a],再通过 -map "[v]" -map "[a]" 映射输出,并指定 -c:v h264_videotoolbox -b:v 8M -c:a aac -ar 44100 输出到 out.mp4。如果任一片段没有音频,则需要去掉 [0:a][1:a]acrossfade…[a] 这一段以及 -map "[a]",否则 ffmpeg 会因缺少流而报错。
【限制与注意事项】 两个输入必须具有相同的分辨率、帧率和像素格式,否则 xfade 会报错或产生异常画面。如果不同,需先对片段 B 做归一化,例如 ffmpeg -y -i b.mp4 -vf "scale=1920:1080,fps=30,format=yuv420p" -c:v h264_videotoolbox b_norm.mp4,并在运行前用 uv run video-agent info 检查两者。xfade 会重新编码,因此需要传入 -c:v h264_videotoolbox(macOS);在此之后,任何进一步的拼接都必须使用 filter_complex concat,而不是流拷贝(stream-copy)concat,因为接缝处不是关键帧。offset 必须根据 A 的真实时长计算,应从 info 读取,不要假设名义长度(被裁剪过的片段常常会差几帧)。duration 是重叠长度,通常为 0.3–1.0 秒,若超过较短的那个片段则会失败。文档建议对转场接缝做视觉验证:uv run video-agent detect out.mp4 --start <offset-0.3> --end <offset+0.3> --step 1,然后查看网格图。
【平台与其他信息】 文档提到的编码参数 -c:v h264_videotoolbox 标注为 macOS。是否支持其他平台、是否有价格或收费信息,资料中暂未提供。