使用 Transformer,您可以组合多个媒体资源(例如视频、图像和音频文件)以创建Composition
。
导出 Composition
要将转换(例如效果或修剪编辑)应用于MediaItem
,您应该创建一个EditedMediaItem
来表示应用了转换的资源。
EditedMediaItem
对象可以串联在一起以创建一个EditedMediaItemSequence
。例如,您可以创建一个包含两个已编辑视频的EditedMediaItemSequence
。 EditedMediaItemSequence
中的项目按顺序排列,并且不会在时间上重叠。
Composition
是一个或多个EditedMediaItemSequence
对象的组合。 Composition
中的所有EditedMediaItemSequence
对象都混合在一起,允许您组合视频和音频资源。
Composition
对象可以使用 Transformer 导出。
以下是如何创建和导出一个视频资源的示例,该视频资源由两个已编辑的视频剪辑组成,并叠加了一个音轨
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 使用 Composition 支持的使用案例的非详尽列表
- 顺序组合音频、图像和视频资源。但是,序列中的所有项目都必须具有相同的轨道。例如,您不能有一个序列,其中包含一个仅音频文件,后跟一个视频文件。
- 向视频资源添加背景音频。
- 向 Composition 添加效果。
- 将 HDR 输入色调映射到 SDR 以生成更优质的 SDR 输出。
当前限制
Composition 中的序列必须满足Transformer.start()
中概述的条件。此外,在使用 Composition 时,以下操作尚不受支持
- 以偏移量开始
EditedMediaItemSequence
的播放。 - 视频或音频轨道的交叉淡入淡出
功能请求
如果您对 Transformer API 有任何功能请求,请在Media3 GitHub 存储库上提交问题。