用途:把视频片段做成梗图/表情包,将图片(logo、头像、贴纸)逐帧贴合到画面中的移动对象上,最终导出 MP4 加 GIF。
流程:先绑定身份再取素材,避免把错误对象的头像贴到画面;在临时目录内工作,只交付最终 MP4 与 GIF。素材来源:本地文件直接使用;URL 可用 yt-dlp 下载,命令为 uv run --with yt-dlp yt-dlp -f "bv*+ba/b" --merge-output-format mp4 -o "source.%(ext)s" "<url>"。用 ffprobe 检查时长,先用低帧率拼接触图定位片段,再按原生帧率抽帧。
跟踪与渲染:用 make_sheets.py 生成网格图读取目标框,写跟踪配置后运行 uv run scripts/track_boxes.py --frames 'seq/f_%04d.png' --config track.json --out tracks.json --last <N>,并用 tile 校验;抖动或镜头切换需重新锚定或改用 manual_keys,并标记可见、淡入、淡出。渲染命令为 uv run scripts/render_overlay.py --frames 'seq/f_%04d.png' --tracks tracks.json --overlays overlays.json --out 'out/o_%04d.png' --last <N>。
静态图片梗图可跳过跟踪:每个目标在 overlays 配置中放一条手动关键帧即可,全部位置来自 keys 时 --tracks 可省略。
编码与限制:用 scripts/encode_outputs.sh 输出 MP4 和 GIF,可调 --gif-width、--gif-fps、--gif-colors。GIF 体积主要由帧数与抖动噪点决定;为适配约 10 MB 限制,依次降低 --gif-fps、宽度、颜色数。需要 ffmpeg 在 PATH、uv 运行内联依赖脚本;下载需 yt-dlp,栅格化 SVG 需要 Chrome/Chromium。国内站点报隧道错误可加 --proxy "",国际站点超时可改用本地代理;无音轨的源可能需去掉 --source 或改为可选映射。交付前应从最终 MP4 与 GIF 抽帧目视确认。