特效:51种视频特效(作者:Ray, @raycfu)
用户通常不熟悉技术。回复要简短友好,替用户完成工作,绝不要求用户自己运行命令。
以下所有路径均相对于本技能文件夹(即此SKILL.md所在文件夹)。请在命令中使用其绝对路径。
1. 首次运行:初始化配置(一次)
运行 bash scripts/setup.sh。完成后会输出 READY(首次运行需要1-3分钟)。
NEED_FFMPEG:为用户安装ffmpeg。在Mac上:brew install ffmpeg(如果缺少brew,告知用户先从brew.sh安装Homebrew)。在Windows上:winget install ffmpeg。NEED_PYTHON:安装Python 3.12(Mac:brew install [email protected],Windows:winget install Python.Python.3.12),然后再次运行安装脚本。- 在Windows上,Python路径为
.venv\Scripts\python.exe而非.venv/bin/python。 - 若Windows无
bash:运行py -3.12 -m venv .venv,然后.venv\Scripts\python.exe -m pip install -r requirements.txt。可选更清晰的抠像:从 https://github.com/PeterL1n/RobustVideoMatting/releases/download/v1.0.0/rvm_mobilenetv3_fp32.onnx 下载模型文件放入models/目录。 NEED_PYTHON_312:默认Python无法安装所需包。请按上述方式安装Python 3.12并重新运行安装脚本。- TensorFlow Lite、MediaPipe或OpenCV的INFO、WARNING或W0000日志行属于正常。只有输出
Done:或saved才表示成功。
2. 获取视频和特效
- 视频:用户将文件拖入聊天窗口,或提供文件路径。竖屏手机拍摄的视频效果最佳。
- 特效:通过
/effects <名称>命令选择,或根据用户描述匹配。将用户的描述与下方表格对应。不确定时,向用户展示特效列表。 - 用户名和昵称:需要显示个人资料的特效(如玻璃小组件、评论框、粉彩字、个人资料墙、标题墙等)默认使用Ray / @raycfu。请向用户询问一次其用户名和昵称,并在每个特效中传递
name和handle参数。
3. 确定时间点
- 如果用户说“在单词X处”或“当我说……时”,运行
.venv/bin/python scripts/words.py <视频路径>并使用返回的时间点。 - 如果用户未提供时间,则将特效应用于整个片段,或询问其希望应用的特定部分(一个简短问题)。
- 短暂的特效窗口效果最佳:每个特效推荐1.5到4秒。
4. 预演、检查、渲染
- 在视频文件旁编写计划文件
<视频文件名>_effects.json:{"effects": [ {"fx": "orbit", "start": 3.2, "end": 6.0}, {"fx": "backdrop-word", "start": 14.0, "end": 16.3, "text": "CLAUDE"} ]} - 先检查关键帧(快速):
.venv/bin/python scripts/fx.py --plan <计划文件.json> <视频> <文件夹>/check.png --still 4.5,15.2,选取每个特效的中间时间点。自行查看生成的PNG图片。如果发现问题(遮挡面部、被边缘裁剪、文字不清晰),调整文字、时间点或选项。 - 渲染:
.venv/bin/python scripts/fx.py --plan <计划文件.json> <视频> <视频文件名>_effects.mp4。输出文件保留原始音频。默认渲染为1080p;添加--width 2160可输出4K(速度更慢)。 - 告知用户输出文件的位置。用一行提醒用户在发布前先观看:这是预演版本,需要用户批准。
单个特效无需计划文件:.venv/bin/python scripts/fx.py orbit <视频> <输出.mp4> --start 3 --end 6 --text "..." --opt key=value
51种特效
| 编号 | fx 名称 | 效果描述 | 选项(均为可选) |
|---|---|---|---|
| 1 | noise | 在头后每四分之一秒累积一个Reel | images(截图或剪辑文件夹),size |
| 2 | lineup | 带数字的瓦片在头上方扇形展开 | text(用|连接的瓦片名称) |
| 3 | locked-on | 角括号锁定面部,摄像机跟随头部运动 | zoom(默认1.35),text(标签) |
| 4 | orbit | Reel围绕头部旋转:底部在前,顶部在后 | images,count,speed,size |
| 5 | lean-in | 在某个单词上快速推进放大 | zoom(默认1.45,最大2),speed |
| 6 | backdrop-word | 一个巨大的单词从身后落下 | text,color(十六进制),font(bold或serif) |
| 7 | spotlight | 熄灭灯光,只照亮你 | text(身后发光的单词),color,push |
| 8 | the-bill | 像收据一样将指令打印到头上方的墙上 | text(用|连接的行) |
| 9 | moody | 情绪化色彩调色 | grade(moody,bw,warm,cool,pop) |
| 10 | swipe | 前后对比滑块从身上滑过 | grade(“之后”的外观) |
| 11 | todo | 头旁的任务清单卡片,在说话时依次打勾 | text(用|分隔的项目),ticks(用|分隔的视频秒数),title |
| 12 | comment-box | Instagram评论栏输入单词并发布 | text(默认EFFECTS) |
| 13 | tap | 关注按钮弹出并翻转成“正在关注” | at(翻转的视频秒数),x,y(0到1),color |
| 14 | pause-point | 定格画面,用手绘箭头指向你 | text(标签),color,label_x |
| 15 | uninstall | 带有毛刺效果的卸载栏将画面打碎 | text |
| 16 | reel-frame | 视频缩小成Instagram Reel卡片 | text(用户名) |
| 17 | shortcut-rain | 键盘按键在身后如雨般落下 | text(用|分隔的按键),count |
| 18 | reject-stamp | 一个大红印章砸在屏幕上 | text,color,angle,y |
| 19 | countdown-flip | 头上方的3、2、1翻页时钟 | from |
| 20 | rabbit-hole | 画面向内隧道般旋转缩小 | ratio,speed,spin |
| 21 | cover-star | 变成杂志封面,标题位于头后 | text(标题),lines(用|分隔),issue,color |
| 22 | scribble | 马克笔涂鸦在周围绘制 | text(标签),color |
| 23 | glass-widgets | 磨砂玻璃小组件和迷你元素在头周围浮动,外加“Edited by Claude”药丸 | text(大数字),name,handle,look(simple表示3组件版本) |
| 24 | red-collage | 黑白的人像,身后巨大的红色单词,三行文字飞入 | text(红色单词),lines(用|分隔),tag |
| 25 | split-headline | 标题卡片下滑,将你推向画面下半部分 | text(用|分隔的行),hl(高亮词),pill |
| 26 | pastel-word | 薰衣草色房间,身后巨大单词,个人资料卡片被关注 | text,name,handle |
| 27 | check-pills | 网格纸房间,身后Reel展示板,光标点击蓝色药丸 | text(用|分隔的药丸),images |
| 28 | timeline | 深红色调色,带有剪辑时间线、REC时间码和发光播放头 | text(标题),sub,tc |
| 29 | headline-box | 推进放大,附带两行标题,第二行在白色方框内 | text(用|分隔的行),zoom |
| 30 | profile-wall | Reel网格填满身后墙壁,同时计数器递增 | images,count,label |
| 31 | tier-list | 层级列表落下,Claude飞入S级 | title,item,others |
| 32 | broll-split | 上方放置B-roll素材并附带价格标签贴纸,下方为你 | images,text(标签) |
| 33 | phone-fan | Reel像手机扇一样展开,上方有标题 | images,text(用|分隔的行) |
| 34 | dot-reveal | 画面由发光点阵构建,然后呈现完整图像 | color,cell |
| 35 | headline-wall | 自己的标题在头后堆叠,然后总计数出现在面前 | text(headline::meta|...),total,label |
| 36 | checklist | 下巴下方的Claude任务列表:每个步骤旋转,然后变为绿色对勾 | text(step::meta|...),title |
| 37 | liquid-glass-graph | 下巴下方的液态玻璃卡片:绿色图表攀升,数字同时计数 | text(标签),from,to(例如197K,59%),color |
| 38 | carousel-spin | Reel在周围3D旋转木马式转动,然后缓慢停止 | images,count,size,turns |
| 39 | match-cut | 新闻页面在某单词处切换,锁定在头后的红色方框中 | text(单词,默认Claude),color |
| 40 | apple-toggles | 下巴下方的iPhone设置卡片逐行打开开关 | text(用|分隔的行),ticks(用|分隔的秒数),color |
| 41 | led-sign | 灯光熄灭,身后LED标志逐字打出 | text(用|分隔的行),color,push |
| 42 | slow-push | 缓慢的电影推近镜头,背景虚化 | zoom(默认1.6),blur |
| 43 | over-the-shoulder-zoom | 镜头推向一个上角,透明液态玻璃图表在头旁弹出(线条攀升、数字计数),然后拉回,再推向另一上角显示第二个相关条状图。头部保持在前 | text(两个标签,用|分隔),to(两个数值,用|分隔,如197K|672K),zoom(默认2.0) |
| 44 | messages | iMessage通知一个接一个弹出,奶油色玻璃材质带有柔和发光,从画面底部向上堆叠 | text(用|分隔的消息),title(默认Messages),y |
| 45 | place-in-grid | 你缩小到磨砂玻璃上3x3个人资料网格的中心瓦片,然后8个Reel一帧帧弹入你周围,每个瓦片显示Instagram观看次数 | images(Reel或封面文件夹),views(9个计数,用|分隔,第9个是你自己的) |
| 46 | tape-label | 一条带有你文字的黄色胶带水平落在你胸口,避开面部 | text |
| 47 | select-resize | 蓝色选择框带手柄抓住头上方的数字,光标将其拉大 | text(默认2X) |
| 48 | wave-trim | 头上方深色面板显示你的语音;两端红色虚线静音部分折叠,直到只剩下你说话的内容 | 无 |
| 49 | huge-strike | 一个巨大的衬线单词从身后擦入,然后一条红线将其划掉 | text,at(效果开始后划线的秒数,默认0.6) |
| 50 | crayon-write | 红色蜡笔在头后写出单词,然后划线并飞走 | text |
| 51 | fan-build | Reel封面一张张扇形展开到头后 | images(封面文件夹),count(默认13) |
命名外观(同一特效的更精美版本;不增加特效计数):
glitter-spotlight= 带look=sparkle的spotlight:房间变暗,金色光束从头后射出,大字金色单词带有光泽扫光,闪烁的闪光和周围光晕。text(单词),color,push。- 带
look=editorial的cover-star:柔和的暖色电影风格,头后经典衬线报头,期号和优雅的封面线条。text(报头),issue,lines(3行文字,用\|分隔),right(用\|分隔的行),color,accent,lines_y,right_y。 - 带
look=bento的liquid-glass-graph:爬升的图表移至头后的烟熏玻璃屏幕,面前有玻璃便当盒式瓦片(甜甜圈、KPI、条形图)。text,from,to,donut(29%::label),kpi(672K::label),bars(197\|140\|124::label)。 apple-toggles现在位于头上方,藏于头后,伴随柔和缩放(pos=below恢复旧的下巴下方卡片;overlap,zoom)。
别名也可用:bill,to-do,follow,stamp,countdown,cover,rain,pause。
规则
- 绝不遮挡面部。所有元素要么位于人物身后,要么自动避开面部;如果检查帧发现文字仍在面部上,则调整位置(
x、y)或缩短文字。 - 特效按计划文件中的顺序执行。当与其他特效重叠时,将摄像特效(
locked-on、lean-in、spotlight)放在最前面。 - 缩放倍数不超过2倍,以保证视频清晰度。
- 此技能仅添加视觉效果。声音效果和字幕由用户自行处理(CapCut效果良好)。
- 这些是基础版本。如果用户将其与他们看过的Reel视频比较,请如实告知。
额外选项(Ray定制版)
以下选项是在基础特效之上添加的,用于修复真实素材中可能出现的视觉问题。像其他选项一样传递(在计划文件中使用"key": "value",或使用--opt key=value)。
| 特效 | 选项 | 作用 |
|---|---|---|
| 任何卡片/轨道特效 | play=1 | 播放卡片内images文件夹中的视频而非静态图像 |
liquid-glass-graph | pos=behind | 将图表置于头后的深色玻璃屏幕而非胸前 |
liquid-glass-graph | smoke=0.5..0.85 | 使用深色烟熏玻璃而非透明液态玻璃(不显示身体的模糊副本) |
liquid-glass-graph,over-the-shoulder-zoom | to=$32,000 | 货币前缀和千位分隔符正确计数 |
checklist | smoke,scale=0.86,bottom=0.95,guard=0 | 深色可读卡片,尺寸更小,位于低位,绝不接触面部 |
checklist | span=2.9 | 打勾动画持续的秒数,使最后一个勾对应于用户的手势 |
spotlight | flicker=0,lift=0.8 | 关闭霓虹闪烁效果,或降低文字位置使头部遮挡部分文字 |
cover-star | mast_y=0.15 | 固定报头高度(配合更紧凑的裁剪,使头部可重叠) |
comment-box | lock=1,avatar_color=#FDB827 | 固定评论面板位置,设置头像颜色(字母来自handle) |
手部遮挡卡片时:先渲染特效,然后运行 .venv/bin/python scripts/hands_front.py <原始视频> <带特效视频> <输出>。
抠像质量:如果 models/rvm_mobilenetv3_fp32.onnx 存在,所有特效均使用Robust Video Matting进行人物抠像(更干净的头发边缘,无闪烁)。设置 FX_MATTE=mp 可使用原始的MediaPipe分割器。