Dual Video Compare Gif
Overview
将两个视频(通常是同一网页/软件的「原版」与「修改版」录屏)左右并排合成为一张循环播放的对比 GIF。左侧顶条标注「原版」,右侧顶条标注「修改」;短视频用末帧冻结补齐到长视频时长;统一用调色板优化控制文件体积。
标准产物参数(已验证)
- 每侧宽 400px、10fps、顶部 25px 白色标签条 → 成品约 800×211,21 秒约 3.5 MB。
- 这是用户认可的体积档位。除非用户明确要求更小,否则直接用它。
使用方式
优先调用脚本,不要手写 ffmpeg 命令:
bash ~/.workbuddy-ai/skills/dual-video-compare-gif/scripts/compare_gif.sh \
<left_video> <right_video> <output.gif>
# 可选:--width 400 --fps 10 --left-label 原版 --right-label 修改
约定:第一个视频放左边(原版),第二个放右边(修改)。若用户给的顺序不明确,先按名字/内容判断(含"原版/original/before"的放左),不确定就直接问。
工作流
- 确认两个输入文件路径与各自的含义(哪个是原版、哪个是修改版)。
- 运行
scripts/compare_gif.sh生成 GIF,输出放到用户指定的工作目录,默认名对比_原版vs修改.gif。 - 抽一帧检查成品(labels 是否渲染、布局是否正确、有无异常)。
- 汇报体积;若用户嫌大,按下面体积表调参后重跑并覆盖旧文件。
体积调节表
| 用户要求 | 参数 | 21 秒双录屏实测 |
|---|---|---|
| 默认 | --width 400 --fps 10 |
≈3.5 MB |
| 更清晰 | --width 640 --fps 15 |
≈12 MB |
| 更小 | --width 320 --fps 8 |
≈2 MB |
还不够小时只能牺牲内容:只对比前几秒(先用 ffmpeg -t 裁切再合成)、改用 WebP/MP4 格式,或去掉冻结补齐段。
关键实现细节(脚本已内置,勿绕开)
- ffmpeg 定位:先找 PATH,找不到用
C:/ffmpeg/bin/ffmpeg.exe。 - 中文字体必须拷贝成相对路径:MSYS/Git Bash 会把
C\:/Windows/Fonts/msyhbd.ttf里的\:转义吞掉导致滤镜解析失败。做法是把字体拷到临时目录后cd过去,滤镜里写fontfile=_f.ttf。 - 该 ffmpeg 构建不支持
-filter_complex_script,必须用-filter_complex。 paletteuse必须显式接调色板输入:[g1][p]paletteuse=...,只写[g1]paletteuse=...会报 "output 0 (p) unconnected"。tpad=stop_mode=clone:stop=-1不可用(本构建报 Invalid argument),须用 ffprobe 分别探测两侧时长后算出差值,给短的一侧加tpad=stop_mode=clone:stop_duration=<差值>。- 分辨率不一致时各自
scale=W:-2后 pad 到共同高度并顶对齐,不要强行拉伸。 - 抖动用
dither=bayer:bayer_scale=5,比默认 sierra2_4a 体积更小且这类录屏观感可接受。
输出检查清单
- 左右两半都在动(或短侧在预期时间点后冻结)。
- 标签「原版/修改」正常渲染中文。
- 循环播放(
-loop 0)。 - 抽帧确认画面内容与源视频一致。