多资产编辑

使用 Transformer,您可以组合多个媒体资源(例如视频、图像和音频文件)以创建Composition

导出 Composition

要将转换(例如效果或修剪编辑)应用于MediaItem,您应该创建一个EditedMediaItem来表示应用了转换的资源。

EditedMediaItem对象可以串联在一起以创建一个EditedMediaItemSequence。例如,您可以创建一个包含两个已编辑视频的EditedMediaItemSequenceEditedMediaItemSequence中的项目按顺序排列,并且不会在时间上重叠。

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 存储库上提交问题。