V1 主轨顺序播放、片段之间可加转场;其余视频轨作为叠加层,按层级从低到高依次压在主画面上。
主轨管顺序,叠加轨管层次
主轨是成片的主干:只按顺序和时长拼接,永远紧密相连。叠加轨是绝对时间轴上的浮层:允许有空隙,谁压在上面由层级决定。
人声与音乐分轨放,每段可单独调增益与淡入淡出;混音时统一做响度处理,避免成片忽大忽小。
字幕挂在全局时间轴上,不跟随任何视频轨 —— 换素材、调轨序都不会让字幕错位。
该有的剪辑动作,一个不少
盒子式布局:素材按原比例居中放进你设定的盒子,可任意角度旋转。角度、位置在预览、面板与导出三处同口径,旋转后拖角也不会越拖越歪。
主轨相邻片段之间加转场,时长与落点可调;转场按片段的时间轴时长计算,变速片段也不会错位。
片段级滤镜预设:亮度对比饱和度、色相、模糊、黑白、色彩平衡,强度可调,还能按片段覆盖全局默认值。导出走滤镜链,预览为近似效果并在界面标注。
0.25×–4× 变速,片段时长自动重算;主轨变速会把后续片段顺移,保证成片不留黑缝。倒放带角标提示(预览不支持反向播放,导出生效)。
叠加片段的进出场用透明度表达,比硬切自然;时长可调,预览与导出用同一个函数算透明度。
字幕位置(上 / 中 / 下)、字号、描边可调,预览按成片分辨率同口径换算;支持导入 SRT 与字幕文本批量替换。
拖得动、夹得住、撤得回
- 多选与框选:拉一个框就能圈住要一起动的片段
- 整组拖动:整组当成一段来消解重叠,组内相对位置不乱
- 轨内推挤:压住别人时自动让位,向右链式推移,绝不把人往左甩
- 吸附对齐:磁吸开关控制拖动时的消解方式,对齐位置精确到毫秒
- 撤销重做:一次手势算一步,最多回退 50 步
- Esc 取消拖动:片段回原位,不留下半步历史
- 片段上直接画波形包络,看得到哪里有声、哪里有坑
- 增益与淡入淡出曲线,拖滑条即时重画波形
- 混音时显式处理响度并做限幅,导出后做质检断言
- 波形解码串行排队,长音频与超大文件有明确兜底,不画假波形
预览和成片,是同一套换算
剪辑器最容易翻车的地方,就是「预览一个样、导出另一个样」。下面这几处全部按同口径实现:
预览画面尺寸由脚本根据画幅与容器算出,不被 CSS 拉伸;画幅比与窗口比不一致时依旧是居中信箱,不会把叠加 UI 定位错。
旋转、缩放、拖动角的几何计算只写在一处纯函数里并带单测;视图只负责喂事件,不在视图里另算一份。
字幕字号与边距统一按成片高度换算,位置用同一套档位映射,预览里多大,成片里就多大。
叠加片段的透明度、滤镜预设与强度都取同一个函数的结果;导出走真实的滤镜链,预览为近似效果并在界面明确标注。
三阶段进度,导出到底在哪一步看得见
构建
按轨道结构拼装滤镜链:主轨顺序拼接、叠加轨逐个叠加、音轨混音,参数校验通过才开始渲染。
渲染
单次 ffmpeg 按整体时间戳推进进度,实时百分比与预估剩余时间一路可见。
封装
写入容器并落盘到媒体目录;烧字幕、响度归一与 AI 生成标识在导出时一并生效。
