TiXL 连续录制(Continuous Capture)完全指南:无固定时长的实时渲染导出
2026/9/19 12:50:51 网站建设 项目流程

TiXL 连续录制(Continuous Capture)完全指南:无固定时长的实时渲染导出

【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3

TiXL 的Render To File(渲染到文件)功能支持一种区别于常规定长导出的录制方式——Continuous(连续)录制:按下渲染后立即开始捕捉,直到你再次按下停止为止,没有预设的结束时间。本文基于 TiXL 开源仓库中的 连续录制人工测试集 与 视频导出帮助文档,并结合渲染窗口、渲染进程的源码实现,完整讲解 Continuous 录制的界面操作、两种时钟模型(Realtime / Deterministic)、编码器警告与持久化行为,让你能够用它录制不限时长的现场演出与即兴 Session。

Continuous 是什么:一种“开放结尾”的录制模式

TiXL 绝大多数导出都针对一个已知起止的固定区间:设定 Start / End,渲染到进度条走完为止。Continuous则完全不同——它是一个open-ended(开放结尾)的录制:

  • 按下Render立即开始捕捉;
  • 持续录制,直到你再次按下捕捉控制(Stop)才收尾并保存文件
  • 没有固定的结束时间,非常适合现场演出、VJ Session、音频反应式即兴创作这类“不知道会演多长”的场景。

与之对应,录制过程中常规进度条会被替换成一个来回扫动的“仍在进行”指示器(sweeping activity indicator),直观表示录制没有确定的进度终点。

在 RenderSettings.cs 中,TimeRanges枚举的第四个成员即为此模式:

/// <summary>Open-ended recording: capture starts immediately and runs until the user stops it, with no /// predetermined end. See <see cref="ContinuousClock"/> for how playback time is driven.</summary> Continuous,

前置条件:先准备好输出

根据测试集 frontmatter 的prerequisites,使用 Continuous 录制前需要满足:

  • 项目中打开了一个具有 Texture2D 输出的算子,并且该输出已在Output Window(输出窗口)中选中或固定(pin),这样 “Render To File” 才有内容可渲染;
  • 理想情况下画面带有可见的运动,这样录制出来的帧之间容易区分,便于验证效果。

第一步:在 Source 面板中启用 Continuous(第四种 Range 模式)

操作:打开Render To File窗口(输出窗口工具栏的滑块图标,或通过主菜单进入),在左侧边栏选择Source区块,观察Range(范围)分段按钮。

预期结果(与 测试步骤 1 一致):

  • Range控件提供四种选项:Custom(自定义)/ Loop(循环)/ Soundtrack(配乐)/ Continuous(连续)
  • 选择Continuous后,Scale / Start / End三行被隐藏,取而代之的是:
    • Clock(时钟)控件(Realtime / Deterministic二选一);
    • Frame Rate(帧率)控件。

在 RenderWindow.cs 中,isContinuous为真时即切换到DrawContinuousOptions(s)绘制 Continuous 专属选项;窗口底部的一行摘要也会变为类似:

Continuous · 1920×1080 · H.264 · realtime · 60 fps

(参见 RenderWindow.cs 的BuildSummaryLine实现——连续模式没有时长与体积预估,因为根本没有固定终点。)

两种时钟模型:Realtime 与 Deterministic

Continuous 的核心区别在于用什么驱动播放时间。你在Clock中选择其一:

维度Realtime(实时)Deterministic(确定性)
捕捉内容现场输出,所见即所得(OBS/VJ 风格)按目标 FPS 推进时间轴
播放控制权完全交给你,播放保持实时、可交互编辑器接管,逐帧推进
帧完整性受编码速度影响,可能丢帧/重复帧逐帧完美(frame-perfect),即使编码慢于实时
音频暂不支持(video only)开启 Export Audio 可包含配乐
分辨率使用输出的原始分辨率受 Resolution Scale 控制

源码枚举 ContinuousCaptureClock 对两种时钟给出了准确定义:

  • Realtime“Leave playback under live/user control and grab whatever the output shows each frame (OBS/VJ-style). Best for live performance and audio-reactive/interactive content.”(保持播放由用户实时控制,逐帧抓取输出画面,最适合现场演出与音频反应式/交互内容。)
  • Deterministic“Step playback forward at the target FPS like a normal render, but without a fixed end — frame-perfect even when encoding is slower than realtime.”(像普通渲染一样按目标 FPS 推进时间,但没有固定终点——即使编码慢于实时也能保证帧完整。)

在界面上,Clock 下方会显示一行随选项变化的提示(见 测试步骤 2):

  • Realtime:提到抓取实时输出,且“仅视频 / 暂无音频”;
  • Deterministic:提到按目标 FPS 推进、帧完美但不实时。

对应 UI 文案见 RenderWindow.cs:

Grabs the live output as you perform; press capture again to stop. (Video only — no audio yet.) Advances time at the target FPS until you stop. Frame-perfect, but not realtime.

Frame Rate 与 Resolution Scale 的实时行为

Frame Rate(帧率):当前仅实现Fixed FPS(固定帧率)。测试集明确要求:该控件处于禁用状态并显示 “Fixed FPS”,提示“可变帧率(VFR)即将推出”。源码中 ContinuousFrameRateMode 枚举确实预留了Variable成员,但注释标注为“Reserved — not yet implemented”(保留,尚未实现);UI 层通过ImGui.BeginDisabled()将其置灰(RenderWindow.cs)。

Resolution Scale(分辨率缩放):当Clock = Realtime时,该行被禁用并提示“Realtime capture uses the native output resolution.”(实时捕捉使用输出的原始分辨率)。原因见 RenderProcess.cs:实时捕捉直接抓取现场纹理,因此强制ResolutionFactor = 1f,不可缩放;而 Deterministic 模式下 Resolution Scale 正常可用(2 倍即可从 1080p 产出 4K 母版)。

慢速编码器会警告,但录制仍然允许

操作:保持 Continuous 选中,进入Format & Quality区块,将Codec切换为较慢的编码器(如VP9ProRes),再换回H264(在显卡支持硬件编码的机器上)。

预期结果(测试步骤 3):

  • 对于无法使用显卡加速的编码器,编码器指示器下方出现警告行,大意:“No hardware encoder — continuous capture may drop or duplicate frames.”(无硬件编码器——连续捕捉可能丢帧或重复帧);
  • Render 按钮保持可用——它只警告、不阻拦;
  • 在可用显卡加速的机器上选择H.264,警告消失。

TiXL 的编码器生态是分层级的(详见 ExportVideos.md 的编码器表格):

  • H.264 / HEVC使用显卡硬件编码器(NVIDIA NVENC、Intel Quick Sync、AMD AMF),速度快;无硬件时回退到慢速软件编码;
  • ProRes / VP9 / AV1 / FFV1依赖软件编码,明显更慢。

UI 逻辑位于 RenderWindow.cs:当TimeRange == ContinuousVideoEncoderAvailabilityCache.Get(codec).Kind != Hardware时,绘制警告。这也解释了为什么实时捕捉强烈建议搭配硬件编码器——帮助文档中专门有一条提示:“Hardware encoding (NVENC / Quick Sync / AMF) is the fast path and matters most for realtime Continuous capture. NVENC needs an NVIDIA driver version 570 or newer.”(NVENC 需要 NVIDIA 驱动 570 或更新版本。)

实战一:Realtime 捕捉——抓取现场输出直到停止

操作(测试步骤 4):

  1. 设置Range = ContinuousClock = RealtimeCodec = H.264
  2. 开始播放,让输出处于动画中;
  3. 按下Render(或使用渲染动画快捷键);
  4. 让输出持续播放几秒,再次按下捕捉控制停止。

预期结果

  • 录制立即开始;底部 footer 用扫动活动段取代进度条,并显示“Capturing… N frames / ”(已捕捉帧数 / 已用时长),数字随时间增长;
  • 输出窗口顶部边缘也出现一条细的扫动指示条(OutputWindow.cs 中以约 30% 宽的扫动段绘制);
  • 播放保持实时、响应正常——它不会被强制或拖动(test 原文:it is not forced or scrubbed);
  • 再次按下捕捉控制后停止并保存文件,状态显示“Captured N frames (…) to …”,回放视频可见刚才屏幕上的实时动态(此模式无音频)。

底层原理:实时捕捉的核心实现是 WriteRealtimeContinuousFrames。它采用**墙钟累加器(wall-clock accumulator)**控制节奏:

  • 记录首次写入帧时的Playback.RunTimeInSecs作为锚点,因此初始化延迟不计入录制时长;
  • 每帧根据elapsed * fps - FrameIndex计算应写入的帧数,编辑器刷新率高于目标 FPS 时直接跳过本帧抓取;
  • 若遇到长时间停顿(弹窗、编辑器暂停),最多补写 4 帧后重新同步墙钟基线,避免用重复帧灌满文件(maxCatchUpFrames = 4);
  • 播放时间完全不被接管——这正是实时模式下停止录制时不会把用户的PlaybackSpeed拉回 0 的原因(RenderProcess.cs)。

实战二:Deterministic 捕捉——逐帧推进直到停止

操作(测试步骤 5):将Clock切换为Deterministic,按下Render,短暂运行后停止。

预期结果

  • 出现同样的活动指示器与 “Capturing…” 读数;
  • 时间按目标帧率稳步推进(输出逐帧前进,即使无法实时跟上);
  • 停止后保存的视频可正常回放;开启 Export Audio 时包含配乐

与 Realtime 不同,Deterministic 走的是普通渲染的时间驱动路径:编辑器逐帧驱动时间轴,结果完全可复现(exactly repeatable)。正如 ExportVideos.md 的技术背景所述,确定性导出不是实时过程,遇到异步算子(如从网络加载图片、seek 视频)时 TiXL 会等待其完成再写帧,以速度换取正确性

停止、保存与取消的差异

连续录制结束后有两种收尾方式,语义不同:

  • StopContinuous(正常的“第二次按下”):完成混流、保留文件,并像普通渲染一样自动递增版本号(RenderProcess.cs);
  • Cancel:视为放弃,不保留文件。

快捷键行为见 RenderProcess.cs:连续录制进行中再次触发渲染动画快捷键,会调用StopContinuous()而非Cancel()——即第二次按下就是正常的“停止并保存”。

此外,连续录制出错时(如输出文件被其他进程占用)会记录“Continuous capture stopped after an error.”并清理会话(RenderProcess.cs)。

Continuous 选项在保存与重载后保持

操作(测试步骤 6):将Range = ContinuousClock = Deterministic,保存项目,关闭并重新打开(或重载),再打开 Render To File 窗口的 Source 区块。

预期结果Range 仍为 Continuous,Clock 仍为 Deterministic。

原理在于渲染设置是按合成(per-composition)持久化的:RenderSettings.Current从当前聚焦合成对象的SymbolUi.RenderSettings读取(RenderSettings.cs),并通过WriteToJson序列化为.t3ui文件中的"RenderExport"属性(RenderSettings.cs)。ContinuousClockContinuousFrameRate均为该结构的字段并被CopyFrom完整拷贝,因此选择在保存/重载后自然保留。

当前限制与 Roadmap

  • Realtime 模式暂无音频:界面中 “Export Audio” 复选框在实时连续录制下被禁用(RenderWindow.cs),渲染进程也会强制ExportAudio = false
  • 仅支持 Fixed FPS:可变帧率(VFR)在源码中已预留Variable枚举,但未实现;
  • 当前导出为 8-bit:HDR 输出(如 EXR 图像序列)与可变帧率连续捕捉在 Roadmap 中列出;
  • 实时捕捉依赖硬件编码器保证帧节奏,软件编码时可能出现丢帧/重复帧(界面会警告但允许继续)。

相关文档与源码索引

  • 本文所依据的测试集:.tests-manual/continuous-capture.md
  • 测试集格式规范(frontmatter、Step 结构、标签约定):.tests-manual/README.md
  • 用户帮助文档(编码器表格、Continuous Capture 章节、技术背景):.help/docs/using/ExportVideos.md
  • 渲染设置与枚举定义:Editor/Gui/Windows/RenderExport/RenderSettings.cs
  • 渲染窗口 UI(Range/Clock 控件、警告、footer):Editor/Gui/Windows/RenderExport/RenderWindow.cs
  • 渲染进程(实时墙钟节奏、Stop/Cancel、会话管理):Editor/Gui/Windows/RenderExport/RenderProcess.cs
  • 输出窗口扫动指示条:Editor/Gui/Windows/Output/OutputWindow.cs

要点回顾:Continuous 是 TiXL 为“无固定时长”场景设计的第四种 Range 模式;Realtime 模式抓取现场输出、保留播放控制权、仅视频;Deterministic 模式逐帧推进、帧完美且可录音频。录制过程中进度条被扫动活动指示器取代,第二次按下即停止保存,且所有 Continuous 选项会随项目持久化。对现场/VJ 使用,请优先选择支持硬件编码的 H.264/HEVC,以获得平滑的实时捕捉。

【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3

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

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

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

立即咨询