短视频分屏对比与画中画合成
让两路画面在同一时间被看清。按观看任务决定是平等对比、上下信息分工,还是主画面加讲解小窗,并明确声音主线。
获取必要输入
两段本地视频、希望的布局、目标画布/帧率、需要同步展示的起点、成片时长与声音来源。脚本从各输入开头对齐;需要动作/口型同步时先裁剪到已确认的共同起点。
利用用户已给信息完成方案;只询问会改变效果的关键缺项。没有看到素材时标明方案是待预览的建议,不声称做过画面识别、同步或视觉验收。对已有成片先另存输出,不改写源文件。
按内容作效果决策
- 平等对比可选 side-by-side;竖屏展示两个独立信息区可选 top-bottom。
- 屏幕教程、访谈或解说可选 pip,主视频放第一路,小窗放第二路。
- 比较商品、前后效果或不同步骤时,核对拍摄条件、时间点、比例与标签;不得用不同条件制造虚假改善。
- 把观众需要读的文字保留在足够大的区域。原图有重要边缘内容时先用等比补边,而不是默认裁掉。
- 先选 first/second/none 声音来源;两路对白同时播放会互相遮蔽,需要混音时交给音频编辑流程。
- 两路默认同起点并截到较短视频,避免自动循环或冻结造成误解。需要长时间停帧或循环时另行明确设计。
从 场景配方 中选择适合的起点,调整参数而非机械套用。给出一句说明:效果要让观众理解什么、作用于什么位置、为何此强度合适。
执行
需要 Python 3.10+ 和提供 libx264/所用滤镜的本地 FFmpeg、FFprobe。无需登录、网络或付费 API;FFmpeg 是用户的本地运行依赖,不捆绑在此包。
- 将 examples/project.json 复制到素材附近,用真实输入路径和参数替换样例。
- 运行 dry-run 检查参数、源素材属性、输出尺寸、时长与声音选择。
- 先渲染低分辨率预览,确认效果,再导出正式尺寸。
- 回看实际导出文件,并保留同名 .render.json 记录。
命令及参数详见 运行说明。程序使用参数数组调用本地工具,不执行 shell 拼接。默认拒绝覆盖输出文件;允许覆盖时也不允许输出指向任一源素材。
技术边界
- side-by-side 和 top-bottom 分别使用 hstack/vstack;两路先统一画布单元、帧率、SAR 和时间基准。
- pip 将第二路等比适配 inset 矩形,加边框后覆盖第一路。
- 成片默认时长=min(两路视频时长),可指定更短的 duration_seconds;不会自动把短片段冻结或循环。
- 音频仅选一条来源。所选来源无音轨时输出无音轨,不偷偷换成另一路。
- 脚本不自动识别主体、跟踪人脸、同步采访或做背景抠像;这些需要额外素材和明确工具。
验收并交付
在开始、中间、末尾检查两个画面均存在、比例正确、文字可读、主次和声源一致、画中画不挡重点。核对输出时长是否符合较短素材策略;如用于效果对比,检查同步与拍摄条件说明。
按需交付效果说明、配置 JSON、预览/正式视频、输出参数和实际回看结论。自动检查尺寸/时长并不证明画面美观或内容真实。若没有执行或回看,准确写出未完成部分。
不要因为目录里有素材就假定可公开、可商用;沿用用户已明确的授权范围。涉及频闪、强抖动或视觉不适时降低强度并提供简单替代效果。
官方技术和来源分析见 来源与组件。