mirror of
https://github.com/hypit-ai/hypit.git
synced 2026-11-06 18:57:21 +00:00
141 lines
5.1 KiB
Markdown
141 lines
5.1 KiB
Markdown
---
|
|
title: Film 与渲染
|
|
description: 装配并列的画面与声音贡献,再渲染所选节目区间。
|
|
---
|
|
|
|
Film 是普通作者组件。它把显式选择的 VisualTrack、AudioTrack 与一个 Canvas、一个 Timeline
|
|
组合成 Composition。渲染器再把 Composition 变成视频。
|
|
|
|
```svml
|
|
<import as="space" from="@hypit/spatial@1"/>
|
|
<import as="film" from="@hypit/film@1"/>
|
|
<import as="html" from="@hypit/html-video@1"/>
|
|
```
|
|
|
|
## 装配 Film
|
|
|
|
```svml
|
|
<space:Canvas id="vertical" width="1080" height="1920"/>
|
|
|
|
<film:Film id="main" canvas={vertical.canvas} timeline={speech.timeline}
|
|
appearance={recipes.film.vertical}>
|
|
<film:Track source={picture.visual}/>
|
|
<film:Track source={mix.audio}/>
|
|
<film:Track source={cards.visual}/>
|
|
<film:Track source={captions.visual}/>
|
|
<film:Track source={meaning.visual}/>
|
|
</film:Film>
|
|
```
|
|
|
|
| 属性 | 必填 | 含义 |
|
|
|---|---|---|
|
|
| `id` | 是 | 公开 Composition 身份 |
|
|
| `canvas` | 是 | 画面坐标系 |
|
|
| `timeline` | 是 | 有限的绝对节目范围 |
|
|
| `appearance` | 是 | Film Recipe,包括清屏颜色 |
|
|
|
|
每个 `<film:Track>` 接受一个 VisualTrack 或 AudioTrack。Film 不会发现某个输出的“兄弟端口”。
|
|
如果同一份规范化媒体要同时贡献画面和声音,就分别从它声明一个 Visual Clip 和一个
|
|
Audio Clip,并在这里显式选择两边产出的 Track。
|
|
|
|
常见输出包括:
|
|
|
|
| 来源 | 类型 | 角色 |
|
|
|---|---|---|
|
|
| `{picture.visual}` | VisualTrack | Visual Track 放置的画面出现关系 |
|
|
| `{mix.audio}` | AudioTrack | Audio Track 中的语音、音乐与效果 |
|
|
| `{cards.visual}` | VisualTrack | 独立图片或视频 Clip |
|
|
| `{captions.visual}` | VisualTrack | Caption 家族 |
|
|
| `{scene.visual}` | VisualTrack | 项目组件 |
|
|
|
|
公开输出是 `{main.composition}`。
|
|
|
|
## 画面顺序属于 Present
|
|
|
|
Film 子项负责选择贡献,并不通过书写顺序定义画面堆叠。每个视觉组件发布带绝对 `z` 的
|
|
定时 Present,通常由 Recipe 中的 `stack-order` 声明。数值小的先绘制;相同数值依次采用
|
|
稳定的 Track 身份、Track 内 Present `order` 和 Present 身份。相对绘制关系确有意义时,作者
|
|
应声明不同数值。
|
|
|
|
```svs
|
|
film.vertical { background: #09090B; }
|
|
media.speaker { stack-order: 10; fit: cover; }
|
|
media.card { stack-order: 40; fit: contain; }
|
|
caption.base { stack-order: 70; }
|
|
/* Fine Text 在 Flow、Point 或 Path occurrence 上直接写 z="90"。 */
|
|
```
|
|
|
|
不同 Track 的 Present 可以交错。若多张画面、图形与文字共享布局或运动,一个 Present
|
|
也可以拥有内部元素树或浏览器程序。共享行为的内容放在一起;仍可独立使用的贡献保持并列。
|
|
|
|
## 渲染完整视频
|
|
|
|
```svml
|
|
<html:Video id="final"
|
|
composition={main.composition} timeline={speech.timeline}/>
|
|
```
|
|
|
|
渲染器编译视觉贡献、捕获所需帧、渲染 AudioTrack,并复用封装为交付文件。
|
|
`{final.video}` 是普通 Resource-backed `Blob`,通常也是 Run Target。
|
|
|
|
```svml
|
|
<?svml using="@hypit/markup/run@1"?>
|
|
<svrun version="1">
|
|
<author source="./main.svml"/>
|
|
<target output="final.video"/>
|
|
</svrun>
|
|
```
|
|
|
|
## 渲染帧区间
|
|
|
|
```svml
|
|
<html:Video id="detail" composition={main.composition} timeline={speech.timeline}
|
|
start-frame="240" end-frame-exclusive="360"/>
|
|
```
|
|
|
|
边界使用原 Timeline 的半开区间。30 fps 时,这个例子渲染第 8–12 秒。即使输出片段从零
|
|
开始,动画和媒体采样仍保留原节目位置。区间渲染只限制最终捕获与编码;上游工作仍由 Run
|
|
选择的图决定,因此应显式复用已接受的媒体与对齐输出。
|
|
|
|
## 完全由组件绘制的影片
|
|
|
|
Timeline 不要求语音或媒体:
|
|
|
|
```svml
|
|
<import as="time" from="@hypit/timeline-author@1"/>
|
|
|
|
<time:Clock id="animation-clock" frame-rate="30"/>
|
|
<time:Timeline id="animation" clock={animation-clock} end="8s">
|
|
<time:Instant id="question" at="0.5s"/>
|
|
<time:Instant id="answer" at="2s"/>
|
|
</time:Timeline>
|
|
|
|
<chat:Scene id="conversation" timeline={animation.timeline} within={canvas.bounds}
|
|
during={animation.window}>
|
|
<chat:Message id="question" at={animation.question} sender="Maya" text="Ready?"/>
|
|
<chat:Message id="answer" at={animation.answer} sender="Leo" text="Let's go."/>
|
|
</chat:Scene>
|
|
|
|
<film:Film id="main" canvas={canvas.canvas} timeline={animation.timeline}
|
|
appearance={recipes.film.main}>
|
|
<film:Track source={conversation.visual}/>
|
|
</film:Film>
|
|
<html:Video id="final" composition={main.composition} timeline={animation.timeline}/>
|
|
```
|
|
|
|
组件用普通绝对时间拥有自己的阅读节奏。没有选择 AudioTrack 时,结果是静音的。在语音作品
|
|
中,Narrative Projection 可以把 Moment 或 Selection 显影成同样的绝对 Instant 与 Window 输入。
|
|
|
|
## 执行前检查
|
|
|
|
```bash
|
|
hypit check main.svml
|
|
hypit plan build.svrun
|
|
```
|
|
|
|
`check` 在不调用外部服务的情况下验证导入、类型和图边。`plan` 编译选定 Run 并显示将要
|
|
请求的 Operations。付费执行前应检查该计划。
|
|
|
|
[时间与装配](./timing.md)解释规范化、Timeline 构造、媒体放置与语义投影;
|
|
[Tracks](./tracks.md)解释 Visual 和 Audio 的作者形式。
|