多重素材资源修改

使用 Transformer,您可以组合多个媒体资源,例如视频、 来创建 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 的 组合支持:

  • 依序组合音频、图片和视频素材资源。不过,所有项目 必须具有相同的轨道。例如,您不能将序列 其中包含一个纯音频文件,后跟一个视频文件。
  • 向视频素材资源添加背景音频。
  • 向组合添加效果。
  • 将 HDR 输入色调映射到 SDR,可生成更优质的 SDR 输出。

当前限制

乐曲中的序列必须满足 Transformer.start()。 此外,使用 乐曲:

  • 开始播放带有偏移量的 EditedMediaItemSequence
  • 淡入淡出视频或音轨

功能请求

如果您对 Transformer API 有任何功能请求,请在 Media3 GitHub 代码库