You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AVAssetExportSession自定义trackID不保留,如何标记旁白音轨?

解决AVAssetExportSession导出后旁白音轨TrackID被重置的识别问题

AVAssetExportSession在导出视频时会重新组织媒体轨道,TrackID属于容器层的临时标识,会被重新分配,所以不能依赖它来持久化识别旁白音轨。以下是几种可靠的替代方案:

1. 用自定义元数据标记音轨

导出过程中会保留音轨的元数据,给旁白音轨添加唯一的自定义元数据项,后续读取时通过元数据匹配识别:

// 创建自定义元数据项,用你自己的标识键
let customKey = "com.yourapp.narration-track"
let metadataItem = AVMutableMetadataItem()
metadataItem.key = customKey as NSString
metadataItem.keySpace = AVMetadataKeySpaceCommon
metadataItem.value = "is-narration" as NSString
metadataItem.locale = Locale.current

// 将元数据绑定到旁白音轨
compositionAudioTrack.metadata = [metadataItem]

后续读取导出的视频文件时,遍历所有音轨,检查元数据中是否存在该自定义键值对,即可定位旁白音轨。

2. 指定音轨的媒体角色

利用AVFoundation的标准媒体角色,将旁白音轨标记为旁白角色,导出后通过角色属性识别:

// 设置旁白音轨的媒体角色
compositionAudioTrack.preferredMediaCharacteristics = [.audible, .narration]

后续读取时,检查音轨的preferredMediaCharacteristics是否包含.narration,即可确定这是旁白音轨。

3. 辅助识别方案(仅作补充)

如果你的场景中旁白音轨总是最后添加的,导出后可以取音轨列表的最后一条,但这种方式在原有视频音轨数量变化时会失效,仅适合简单固定的场景。

内容的提问来源于stack exchange,提问作者Michael Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:57:19