☰
OpenShot 转场(Transitions)完全指南:从交叉溶解到自定义遮罩动画
2026/10/7 2:38:07 网站建设 项目流程
  • 桌面应用
  • 音视频
  • 视频处理

【免费下载链接】openshot-qt

OpenShot Video Editor is an award-winning free and open-source video editor for Linux, Mac, and Windows, and is dedicated to delivering high quality video editing and animation solutions to the world.

项目地址:https://gitcode.com/gh_mirrors/op/openshot-qt
点击查看免费下载

导读:转场(Transition)是视频剪辑中连接两个片段、实现平滑视觉过渡的核心工具。本文以 OpenShot Video Editor 官方文档doc/transitions.rst为骨架,完整讲解转场的创建、方向控制、透明度处理、裁剪、遮罩(Mask)与自定义转场,并结合当前仓库源码(转场模型扫描、关键帧反转、时间线渲染等)深入剖析其底层实现。读完你将掌握:如何用蓝色圆角转场条实现淡入淡出与擦除效果、如何把任意灰度图变成自定义转场/遮罩、以及转场属性(Brightness、Contrast、Mask 系列等)每一项的真实含义与动画用法。

转场是什么:在时间线上如何工作

转场(Transition)用于在两个片段图像之间逐步淡出(cross dissolve / crossfade)或擦除(wipe)。在 OpenShot 中,转场在时间线上表现为蓝色圆角矩形:

  • 当你重叠两个片段时,OpenShot 会自动创建转场;
  • 也可以从Transitions(转场)面板手动拖拽一个转场到时间线上;
  • 转场必须放置在某个片段的上方(与其重叠),最常见的位置是片段的开始或结尾处。

重要提示:转场不会影响音频!如果想让片段的音量淡入淡出,必须调整片段的volume(音量)属性,详见 doc/clips.rst 中的 Clip Properties 章节。

下图展示了时间线上两个片段与自动生成的转场之间的关系(图片来自官方文档 doc/images/clip-overview.jpg):

#名称说明
1Clip 1一个视频片段
2Transition两个片段图像之间的渐变转场,由重叠片段自动创建(不影响音频)
3Clip 2一个图像片段

转场面板与内置转场资源

在 OpenShot 主界面的Transitions 面板中,可以浏览、筛选并拖拽转场。从源码 src/windows/models/transition_model.py 可以看到,转场模型会扫描三类目录:

  1. info.PATH/transitions/common—— 常用转场(如 Fade In / Fade Out);
  2. info.PATH/transitions/extra—— 扩展转场资源(库内置的数百种灰度转场图,如溶解、光线、波纹、擦除等,实际资源位于 src/transitions 目录);
  3. 用户自定义目录info.TRANSITIONS_PATH(即~/.openshot_qt/transitions/),若存在则追加为user分组。

模型会为每个转场生成缩略图(调用 libopenshot 的Clip/Reader读取第 0 帧并Thumbnail(...)保存到缓存目录),并支持“仅显示常用转场”过滤(actionTransitionsShowCommon)。面板同时提供树状视图与列表视图,两个视图的选择状态会双向同步。当转场被拖拽到时间线时,拖拽数据以 JSON 文本承载转场图片的绝对路径,并附带"transition"标识。

转场方向:正向与反向

转场通过调节被转场覆盖片段的 alpha/透明度来实现效果,既可以从不透明淡到透明,也可以从透明淡到不透明(同样不影响音频)。

  • 反向操作:在时间线上的转场上右键单击,选择 :guilabel:Reverse Transition(反转转场)即可改变淡入淡出的方向;
  • 手动微调:也可以直接编辑Brightness(亮度)曲线,按任何你希望的方式动画化这个视觉淡变效果。

反向转场的源码实现

Reverse Transition菜单项在 src/windows/views/timeline.py#L4964-L4966 中注册,触发后调用Reverse_Transition_Triggered(src/windows/views/timeline.py#L4812-L4838),其实现逻辑是:

  1. 遍历所有选中的转场,读取其 JSON 数据;
  2. 根据项目 FPS(fps["num"] / fps["den"])与转场时长end - start计算总帧数;
  3. 对brightness、contrast两个属性调用_reverse_keyframes(src/windows/views/timeline.py#L1136-L1170):
    • 将所有关键帧点的 X 坐标围绕min_x + max_x枢轴做镜像翻转;
    • 同时交换每个点的handle_left/handle_right贝塞尔手柄;
  4. 写回内存数据并通过update_transition_data持久化到项目文件。

也就是说,“反转转场”在底层就是翻转 Brightness/Contrast 关键帧曲线的时间方向,这也是为什么它只对基于静态灰度图的转场有意义。另外,当你把转场拖到片段的左边缘时,OpenShot 还会通过_auto_orient_transition_keyframes(src/windows/views/timeline.py#L1254-L1308)自动推断当前亮度曲线的首尾值方向,并自动翻转,使左边缘放置的转场默认呈现淡入朝向——但若方向无法明确推断(如自定义的非单调曲线),则不会擅自改写你的曲线。

透明度:带 Alpha 通道的素材要小心

如果转场用在本身带有透明通道(alpha channel)的图像或视频上,会出现问题:由于 OpenShot 的转场系统期望第 2 个片段完全覆盖第 1 个片段,一旦第 2 个片段未完全覆盖(例如它含有透明区域),原始片段就会突然消失(popping out of existence),过渡不再平滑。

此时正确的做法是:

  • 改用第 1 个片段的alpha属性,在需要的地方让它自己淡出——所有可编辑的片段属性请参考 doc/clips.rst 的 Clip Properties 表(其中Alpha是关键帧类型曲线,取值范围 1 到 0);
  • 或者参考 Clip Presets(片段预设)文档;
  • 也可以组合使用转场与alpha淡变:让透明素材既通过转场过渡、又通过 alpha 曲线淡出,从而在两个透明片段之间更平滑地切换。

裁剪与切片:调整转场的起止位置

OpenShot 提供了多种调整转场起止裁切位置(cutting / trimming)的方法:

  • 最常用:直接抓住转场的左(或右)边缘并拖动,即可改变其起止位置;
  • 拖拽时若多个选中的片段/转场共享最左或最右边缘,一次拖拽可以同时裁切它们;
  • 更完整的切片方法与快捷键清单,请参考 doc/clips.rst 的Trimming & Slicing章节与 doc/main_window.rst 的Keyboard Shortcuts章节。

常用切片快捷键速查(详见上述文档):在播放头与多个片段重叠时,右键播放头选 :guilabel:Slice All,或用Ctrl+Shift+K(保留两侧)、Ctrl+Shift+J(保留左侧)、Ctrl+Shift+L(保留右侧);对选中片段使用 :guilabel:Slice,对应Ctrl+K/Ctrl+J/Ctrl+L;W/Q可对选中片段做带波纹(Ripple)的左右侧保留切片。

遮罩(Mask):把转场变成动态遮罩

在视频编辑中,遮罩是一种强大的工具,可以让你有选择地显示视频片段的特定区域,与图像编辑中的蒙版类似:遮罩定义了一个“受影响的区域”,区域之外的内容保持不变。

  • 遮罩的形态:可以看作勾勒目标区域的形状或路径,常用形状包括矩形、圆形和自由路径;被遮罩覆盖的区域称为“masked region”。
  • 遮罩可以动画化:随时间改变形状或位置,从而实现动态效果,例如揭示隐藏元素、或在不同视觉状态之间转换。
  • 在 OpenShot 中把转场变成遮罩:通过自定义Brightness 关键帧曲线来实现。保持亮度值恒定不变(不随时间变化),就得到一个位置固定的静态遮罩;再配合自定义转场图像、甚至自定义图像序列,就能创造出动画化、复杂的遮罩。

静态遮罩与动画遮罩的默认值差异

从源码 src/windows/views/timeline.py#L1106-L1134(_set_transition_mask_defaults)可以看出 OpenShot 区分两种遮罩源并设置不同默认曲线:

  • 静态遮罩(单张图像,has_single_image为真):将start归零,end保留时长,亮度曲线默认从1.0线性衰减到-1.0,对比度默认3.0;
  • 动画遮罩(视频或图像序列):保留原有start/end,亮度、对比度默认恒为0.0,由Mask: Time Mode、Mask: Loop等属性决定取哪一帧作为当前遮罩源。

当你编辑转场的基础属性(only_basic_props=True)时,源码会保留原有的 brightness/contrast 关键帧,并在时长变化时按新旧帧数比例缩放关键帧、锚定端点关键帧(_scale_keyframes/_anchor_transition_endpoint_keyframes),避免遮罩动画被意外破坏——这说明 Brightness 曲线在转场系统里承担着“遮罩通道”的核心职责。

自定义转场:任意灰度图都能用

任何灰度图像都可以作为转场(或遮罩)使用,方法如下:

  1. 将图片文件放入你的~/.openshot_qt/transitions/文件夹;
  2. 给文件起一个易于辨认的名字;
  3. 重启 OpenShot。

重启后,你的自定义转场/遮罩就会出现在转场列表中。从源码看,用户目录info.TRANSITIONS_PATH定义为USER_PATH/transitions(见 src/classes/info.py#L63),与文档中的~/.openshot_qt/transitions/一致;转场模型会把它作为第三个user分组加载(src/windows/models/transition_model.py)。

文件名命名方面,模型会把文件名中的下划线转换为空格并首字母大写作为显示名称;若文件名以_数字结尾,还会把数字提取为占位符(如wipe_1→ “Wipe 1”)。另外,隐藏文件(以.开头)以及thumbs.db会被跳过。

还有一个值得知道的实现细节:保存项目文件时,src/classes/json_data.py#L312-L321 会把位于info.PATH/transitions目录内的转场路径转换为可移植的相对路径@transitions/<category>/<file>(例如@transitions/common/fade_in.jpg),这样项目文件跨机器打开时仍能正确定位内置转场。

转场属性详解

查看转场属性:在转场上右键单击,选择 :guilabel:Properties,属性编辑器会出现。以下属性中大部分可以随时间动画化:

注意:请密切留意播放头(红色播放线)的位置——关键帧会在当前播放位置自动创建,这是快速制作动画的关键。另外再次强调:转场不影响音频,音频淡入淡出请调整片段的volume属性(见 doc/clips.rst)。

转场属性名类型说明
BrightnessKey-frame转场图像的亮度曲线,决定淡入淡出/擦除的效果(范围 -1 到 1)
ContrastKey-frame转场图像的对比度曲线,决定淡入淡出/擦除的柔和度或硬度(范围 0 到 20)
DurationFloat转场时长(秒)。只读属性。
EndFloat转场结束处的裁切位置(秒)。
IDString随机生成的 GUID(全局唯一标识符),创建时自动分配。只读属性。
Mask: InvertBool反转遮罩源:亮区变暗区、暗区变亮区。
Mask: LoopBool当转场比遮罩源更长时,循环播放动画遮罩源。
Mask: SourceReader作为转场灰度遮罩源的图像、图像序列或视频。
Mask: Time ModeEnum控制 OpenShot 如何将转场时间映射到动画遮罩源的帧。
ParentString此转场的父对象,使众多关键帧值初始化为父值。
PositionFloat转场在时间线上的位置(秒)。
Replace ImageBool调试用:显示转场图像本身(而不是变成透明度)。
StartFloat转场开始处的裁切位置(秒)。
TrackInt承载转场的轨道层级(更高的轨道渲染在更低的轨道之上)。

Duration(时长)

Duration是表示转场长度(秒)的浮点值,只读,计算公式为:End - Start。要修改时长,必须编辑Start和/或End属性。

  • 使用示例:检查转场时长,确保它适配项目中某个特定时间槽。
  • 技巧:需要匹配对话或场景等特定时间间隔的转场,请善用 Duration 属性来核对。

End(结束点)

End定义转场结束处的裁切点(秒),控制转场在时间线上可见多少内容。修改它会影响Duration。

  • 使用示例:裁掉转场结尾不需要的部分,或让转场终点与其他片段对齐。
  • 技巧:组合使用Start与End可精确控制转场的可见区间。

ID(标识符)

ID是每个转场创建时随机生成的 GUID(全局唯一标识符),只读,确保其唯一性。

  • 使用示例:在自定义脚本或自动化任务中引用特定转场。
  • 技巧:虽然通常由系统在幕后管理,但理解转场 ID 有助于高级项目定制。

Mask 系列属性

Mask: Source、Mask: Time Mode、Mask: Loop、Mask: Invert共同控制转场使用的灰度遮罩:

  • 静态遮罩使用单张图像;

  • 动画遮罩可以使用视频或图像序列,由时间映射(Time Mode)与循环(Loop)选项决定转场中每一时刻使用遮罩源的哪一帧。

  • 使用示例:当自定义遮罩的可见/隐藏区域反了时,使用Mask: Invert一键翻转。

  • 技巧:使用动画遮罩时,务必先仔细裁剪好遮罩源,再启用循环行为(Loop)。

Track(轨道层级)

Track是表示转场所在层级的整数。更高轨道上的转场渲染在更低轨道之上。

  • 使用示例:将转场安排在不同图层,创造视觉深度与复杂度。
  • 技巧:像文字叠加或图形这类需要显示在其他元素之上的内容,使用更高的轨道。

转场在时间线上的几何计算

从渲染层源码 src/windows/views/timeline_backend/geometry/transition.py 可以看到,时间线会把每个转场转换为QRectF矩形:水平位置 =track_name_width + position * pixels_per_second,宽度 =(end - start) * pixels_per_second,垂直位置由轨道层级(layer)决定,然后按水平起点排序并记录每个条目的右侧最大延伸,用于后续的命中检测、选择与绘制。绘制层 src/windows/views/timeline_backend/paint/transition.py 则负责把转场画成蓝色圆角矩形(默认不透明度 0.75、选中 0.88,锁定轨道再乘以 0.8),顶部带有标题与下拉菜单按钮,并使用像素图缓存提升滚动性能——这就是“蓝色圆角矩形”这一视觉形态的代码来源。

相关文档导航

  • 转场完整说明:doc/transitions.rst
  • 片段属性(alpha、volume等)与裁剪/切片指南:doc/clips.rst
  • 全部键盘快捷键:doc/main_window.rst
  • 转场面板与模型实现:src/windows/models/transition_model.py
  • 反向转场与遮罩默认值实现:src/windows/views/timeline.py
  • 转场几何与渲染:src/windows/views/timeline_backend/geometry/transition.py、src/windows/views/timeline_backend/paint/transition.py
  • 桌面应用
  • 音视频
  • 视频处理

【免费下载链接】openshot-qt

OpenShot Video Editor is an award-winning free and open-source video editor for Linux, Mac, and Windows, and is dedicated to delivering high quality video editing and animation solutions to the world.

项目地址:https://gitcode.com/gh_mirrors/op/openshot-qt
点击查看免费下载
上一篇:ncmdump 完整指南:免费开源的 NCM 转换器,一条命令还原 MP3/FLAC
下一篇:qq_music_aum 群晖歌词插件完整教程:3步给 Audio Station 接上 QQ 音乐歌词

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询