借助 Transformer,您可以将多个媒体资源(例如视频、图片和音频文件)组合起来,制作出 Composition。
导出组合
如需对 MediaItem 应用转换(例如效果或剪辑编辑),您应创建一个 EditedMediaItem 来表示已应用转换的素材资源。
然后,可以将 EditedMediaItem 对象串联起来以创建 EditedMediaItemSequence。例如,您可以创建一个包含两个已剪辑视频的 EditedMediaItemSequence。EditedMediaItemSequence 中的项按顺序排列,且在时间上不重叠。
Composition 是一个或多个 EditedMediaItemSequence 对象的组合。Composition 中的所有 EditedMediaItemSequence 对象都会混合在一起,让您可以组合视频和音频素材资源。
可以使用 Transformer 导出 Composition 对象。
以下示例展示了如何创建和导出包含两个经过剪辑的视频片段并叠加了音轨的视频素材资源:
Kotlin
val transformer = ... // Set up Transformer instance val video1 = EditedMediaItem.Builder( MediaItem.fromUri(video1Uri)) .build() val video2 = EditedMediaItem.Builder( MediaItem.fromUri(video2Uri)) .build() val videoSequence = EditedMediaItemSequence.Builder( setOf(C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO)) .addItems(video1, video2) .build() val backgroundAudio = EditedMediaItem.Builder( MediaItem.fromUri(audioUri)) .build() val backgroundAudioSequence = EditedMediaItemSequence.Builder( setOf(C.TRACK_TYPE_AUDIO)) .addItem(backgroundAudio) .setIsLooping(true) // Loop audio track through duration of videoSequence .build() val composition = Composition.Builder( videoSequence, backgroundAudioSequence) .build() val filePath = ... // Provide file path to save Composition transformer.start(composition, filePath)
Java
Transformer transformer = ... // Set up Transformer instance EditedMediaItem video1 = new EditedMediaItem.Builder( MediaItem.fromUri(video1Uri)) .build(); EditedMediaItem video2 = new EditedMediaItem.Builder( MediaItem.fromUri(video2Uri)) .build(); EditedMediaItemSequence videoSequence = new EditedMediaItemSequence.Builder( ImmutableSet.of(C.TRACK_TYPE_AUDIO, C.TRACK_TYPE_VIDEO)) .addItems(video1, video2) .build(); EditedMediaItem backgroundAudio = new EditedMediaItem.Builder( MediaItem.fromUri(audioUri)) .build(); EditedMediaItemSequence backgroundAudioSequence = new EditedMediaItemSequence.Builder( ImmutableSet.of(C.TRACK_TYPE_AUDIO)) .addItem(backgroundAudio) .setIsLooping(true) // Loop audio track through duration of videoSequence .build(); String filePath = ... // Provide file path to save Composition Composition composition = new Composition.Builder( videoSequence, backgroundAudioSequence) .build(); transformer.start(composition, filePath);
支持的用例示例
以下列出了 Transformer API 支持的组合用例,但并非详尽无遗:
- 按顺序组合音频、图片和视频素材资源。
- 向视频素材资源添加背景音频。
- 向合成添加效果。
- 将 HDR 输入色调映射到 SDR,以生成画质更好的 SDR 输出。
当前限制
组合中的序列必须满足 Transformer.start() 中列出的条件。此外,在处理乐曲时,以下操作尚不受支持:
- 视频轨道或音轨的交叉淡入淡出
功能请求
如果您对 Transformer API 有任何功能请求,请在 Media3 GitHub 代码库中提交问题。