跳转到内容

Editing Commands 速查

所有命令位于 session.transaction.commands,并同步返回 TransactionCommit 或带 commit 的结果。成功后 Project 和 revision 已经更新;不需要再调用 commit()

通用选项:

选项用途
label?给历史记录和 ChangeSet 一个可读名称
baseRevision?乐观并发检查;过期时返回 REVISION_CONFLICT
historyGroup?把相邻且 key 相同的编辑合成一条 undo 记录
命令必填/关键选项返回
insertItemitem, beforeItemId?TransactionCommit
removeItemitemIdTransactionCommit
moveItemitemId, toTrackId?, startUs?, beforeItemId?TransactionCommit
trimItemitemId, edge, toUsTransactionCommit
splitItemitemId, rightItemId, atUsSplitItemResult
replaceItemitemId, replacementTransactionCommit
rippleInsertIteminsert 选项,trackIds?TransactionCommit
rippleRemoveItemremove 选项,trackIds?TransactionCommit
const split = session.transaction.commands.splitItem({
itemId: 'item_left',
rightItemId: 'item_right',
atUs: 5_000_000,
baseRevision: session.revision!,
label: '切分片段',
});
console.log(split.leftItemId, split.rightItemId, split.commit.revision);

replaceItem 不能改变 ID、Track 或所有权结构。结构变化使用 move/link 等专门命令。

命令关键选项
linkItemsgroupId, itemIds, kind?
unlinkItemsgroupId, itemIds?
moveLinkedGroupgroupId, deltaUs
trimLinkedGroupgroupId, edge, amountUs
removeLinkedGroupgroupId
splitLinkedGroupgroupId, rightGroupId, atUs, rightItemIds

Linked split 要求所有成员都包含切分点。调用方为每个右侧 Item 和新 Group 提供未使用的 ID。

const rightItemIds = Object.fromEntries(
group.itemIds.map(itemId => [itemId, nextEntityId('item')]),
);
session.transaction.commands.splitLinkedGroup({
groupId: group.id,
rightGroupId: nextEntityId('link'),
atUs: playheadUs,
rightItemIds,
});
命令参数结果
slipItemitemId, deltaSourceUs时间线范围不动,移动原素材窗口
rollEditleftItemId, rightItemId, toUs改相邻边界,两个片段总范围不变
slideItemitemId, deltaUs移动中间片段,并补偿左右邻居

这些命令会检查 source handle、相邻关系、Transition 和 TimeMap。当前映射无法安全修改时返回 COMMAND_TIME_MAPPING_UNSUPPORTED

命令关键选项
reorderTracksequenceId, trackId, beforeTrackId?
setTrackLockedtrackId, value
setTrackEnabledtrackId, value
setTrackMutedtrackId, value
setTrackSolotrackId, value

Mute/Solo 只适用于有 audio mixer 属性的音频轨。Locked 轨会拒绝对其 Item 的编辑。

命令关键选项
addMarker完整 marker
updateMarkermarkerId 和要更新的字段
removeMarkermarkerId
setSelectionMetadatasequenceId, itemIds, range?

markerLabel: nullmarkerColor: null 用于删除可选字段。普通临时选择留在 UI state;只有需要保存或协作的选择才写 selection metadata。

命令会检查实体存在、轨道类型、锁定、时间、source handle、Transition、引用、所有权和 no-op。失败时抛出带 Diagnostic 的 AelionError,Project、revision 和 history 都不变化。

选项的精确 TypeScript 类型见 API Reference 的 @aelionsdk/transaction,实际拖拽模式见时间线编辑