Permalink to 图片操作图片操作

有三个包接收一张图片、交还一张图片。它们都不产出 Track:每个输出都是一张可供下游引用的图片——作为 Seedance 的参考帧、作为 Media Item,或作为下一次操作的来源。

它们都需要 Endpoint。image-composeimage-transform 索取 raster 能力,由 @hypit/provider-image-opencv-local 在本机运行 OpenCV 来满足;background-removal 索取的是它自己声明的能力,由 @hypit/provider-kie 远程满足。使用这些操作时,在 Runtime Profile 中选择支持它们的 Endpoint。

Permalink to 合成图层合成图层

compose:Image 按书写顺序把各图层画到同一张画布上,交还一张 PNG。

svml
<import as="compose" from="@hypit/image-compose@1"/>

元素接受 idcanvas,以及可选的 background——它必须带 alpha,写作 #RRGGBBAA,默认为完全透明。子元素是 compose:Layer,至少一个、至多六十四个,各自为空:

属性取值
source必填——一张图片
frame必填——一个 space:Frame
fit可选——contain(默认)、coverstretch
interpolation可选——nearestlinearcubicarealanczos(默认)
opacity可选——0 到 1,默认 1
svml
<compose:Image id="card" canvas={portrait} background="#00000000">
  <compose:Layer source={background.image} frame={full} fit="cover"/>
  <compose:Layer source={product.image} frame={product-frame} fit="contain"/>
</compose:Image>

输出: {card.image}——一张图片,不是 Track。

Permalink to 校正图片校正图片

image:Program 是一份具名的操作清单,image:Transform 把它作用在某个来源上。这样拆开是有意的:一份写好的 program 可以套用到每一个需要同样处理的镜头上。

svml
<import as="image" from="@hypit/image-transform@1"/>

image:Program 只接受 id,操作以子元素形式书写,按书写顺序依次施加:

操作属性
Cropxywidthheight;可选 unit="fraction" | "pixel"
Resizewidthheight;可选 fitinterpolationbackground
Rotatedegrees,只能是 90180270
Flip可选 axis="horizontal" | "vertical" | "both"
Denoise可选 lumachromatemplate-windowsearch-windowsaturation-recovery
Color可选 exposure-stopscontrastsaturationtemperaturetintgamma
Sharpen可选 amountradiusthreshold
Blursigma
Alpha可选 mode="preserve" | "flatten"flatten 要求给出 backgroundpreserve 则拒绝它
Encode可选 format="png" | "jpeg" | "webp"qualitybackground

一份 program 至多只能有一个 Encode,且必须放在最后。除 BlurRotateCrop 之外,每个操作都能仅凭默认值运行,所以 <image:Denoise/> 本身就是一条完整的指令。

image:Transform 接受 idsourceprogram,全部必填。

svml
<image:Program id="clean-gpt-image">
  <image:Denoise/>
  <image:Encode format="png"/>
</image:Program>

<image:Transform id="clean-shot" source={shot.image} program={clean-gpt-image}/>

输出: {clean-shot.image}。program 本身不产出任何图片——它是一份配方,在 Transform 中指名它才会真正运行。

Permalink to 去除背景去除背景

svml
<import as="remove" from="@hypit/background-removal@1"/>

remove:Background 必须为空,接受 idsource。它不挑选模型、阈值或存储——那是 endpoint 的事,不是 Source 的事。

svml
<remove:Background id="cutout" source={portrait.image}/>

输出: {cutout.image}——通常喂给一个 Media Item,好让出镜者叠在画面上,而不是待在一个方框里。

Permalink to 移动人物抠像移动人物抠像

人物需要出现在其他画面之上时,可以将生成或已有视频交给 @hypit/volcengine-matting,由支持该能力的 HypiHub Endpoint 执行:

svml
<import as="matte" from="@hypit/volcengine-matting@1"/>
<matte:Portrait id="cutout" source={performance.video}/>

cutout.video 归一化,准备进入时间线。如果它建立说话节目的语义骨架,再把准备好的媒体与 Script Segment 对齐,通过 Speech Track 装配。画面由 Media Track 或项目场景按选择的位置、绘制顺序呈现。作为 B-roll 时,归一化后的抠像可以直接进入 Media Track。抠像改变画面背景,具体角色由编排决定。