03:00:00省 50%领取

实操配方

参考视频时间窗裁剪:越界拒绝与保留帧验收

按左闭右开边界制作一秒参考片段。本配方裁剪连续视频区间,不是按时间基准选择一张静帧。

附实际运行过的本地样例、脚本和回执;不代表已调用视频生成服务。

原创任务专用本地夹具示意图
原创逐帧变色参考片、实际一秒裁剪结果与专门的区间图;未运行提供商或模型生成。

01准备环境与输入

  1. 准备 Node.js 与 FFmpeg,必要时设置 FFMPEG_BIN。脚本创建 320×180、每秒十帧、三秒长的原创参考夹具。
  2. 查看 window.json:源时长来自三十个解码帧和本夹具明确的恒定帧率,选定起点为 0.5 秒、终点为 1.5 秒。
  3. 选择新的输出目录,先用配套 CFR 夹具验证。任意 VFR 或非零起点参考的可用尾部边界,需要另外建立时间戳清单。

02执行配方

运行命令

node run-recipe.mjs --out ./my-run
  1. 确认源片真正可用的区间

    完整解码原创夹具,确认每秒十帧下确有三十帧,由此建立受控的三秒区间。构建用原始 RGB 暂存会在 finally 清理。这种受控 CFR 时长算法不能直接当成通用 VFR 时长推算。

  2. 编码前拒绝无效边界

    本地校验要求两个值有限、起点不小于零、终点大于起点,且不超过源时长。脚本分别实跑负起点、相等边界、倒序边界、超尾请求和 NaN,不静默纠正。

  3. 裁剪后重新设置时间原点

    实际应用 trim=start=0.5:end=1.5,setpts=PTS-STARTPTS 并重新编码。trim 保留源片连续区间,setpts 让输出从零开始;终点不包含从源片 1.5 秒开始的那一帧。

  4. 同时比较首尾画面与输出时间

    结果应完整解码为十帧,首尾分别与源索引 5、14 的 RGB 比较,再解析真实 showinfo 日志,确认输出 PTS 从 0.0 到 0.9、间隔 0.1 秒。本次首尾最大通道差均为零。

03检查结果

  • 源片实际解码为三十帧 320×180,符合受控十 FPS。
  • 0.5–1.5 秒通过有限数值与区间边界规则。
  • 裁剪片段准确解码为十帧,对应十 FPS 下的一秒。
  • 输出首尾分别匹配源索引 5、14,通道差不超过四,本次均为零。
  • 实际输出时间戳从零开始,最后为 0.9 秒。
  • 五种无效窗口均被拒绝,十一项回执与 showinfo 实际日志一同保留。

04排错与交付

第一帧时间仍显示 0.5 秒。

只在 trim 后补回 setpts=PTS-STARTPTS,再读取输出 showinfo 时间戳。

片段包含源片 1.5 秒开始的画面。

使用配方明确的右开边界,以源索引 14 验收最后一帧,不通过延长终点补偿。

要求的终点超过参考片。

只把 endSeconds 降到已确认边界,或获取原本需要的更长参考;不悄悄截成合法值。

把请求时间窗、源片可用区间与解码端点检查一起保存。小型 CFR 夹具证明这次裁剪操作,不代表所有真实参考片的时间戳行为。

05下载脚本与样例