使用 Transformer,您可以组合多个媒体资产(例如视频、图像和音频文件)以创建 Composition
。
导出 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( video1, video2) val backgroundAudio = EditedMediaItem.Builder( MediaItem.fromUri(audioUri)) .build() val backgroundAudioSequence = EditedMediaItemSequence( ImmutableList.of(backgroundAudio), /* isLooping= */ true) // Loop audio track through duration of videoSequence 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( video1, video2); EditedMediaItem backgroundAudio = new EditedMediaItem.Builder( MediaItem.fromUri(audioUri)) .build(); EditedMediaItemSequence backgroundAudioSequence = new EditedMediaItemSequence( ImmutableList.of(backgroundAudio), /* isLooping= */ true); // Loop audio track through duration of videoSequence String filePath = ... // Provide file path to save Composition Composition composition = new Composition.Builder( videoSequence, backgroundAudioSequence) .build(); transformer.start(composition, filePath);
支持的用例示例
以下是 Transformer API 通过 Compositions 支持的用例(非穷举列表)
- 按顺序组合音频、图像和视频资产。但序列中的所有项都必须具有相同的轨道。例如,您不能拥有包含纯音频文件后跟视频文件的序列。
- 向视频资产添加背景音频。
- 向 Composition 添加效果。
- 将 HDR 输入色调映射到 SDR,以生成视觉质量更好的 SDR 输出。
当前限制
Composition 中的序列必须满足 Transformer.start()
中概述的条件。此外,在使用 Compositions 时,尚不支持以下操作:
- 从偏移量开始播放
EditedMediaItemSequence
。 - 视频或音轨交叉淡入淡出
功能请求
如果您对 Transformer API 有任何功能请求,请在 Media3 GitHub 代码库中提交问题。