Bearbeitung mehrerer Assets

Mit Transformer können Sie mehrere Media-Assets wie Videos, Bilder und Audiodateien kombinieren, um ein Composition zu erstellen.

Komposition exportieren

Wenn Sie Transformationen (z. B. Effekte oder Kürzungen) auf ein MediaItem anwenden möchten, sollten Sie ein EditedMediaItem erstellen, das das Asset mit den angewendeten Transformationen darstellt.

EditedMediaItem-Objekte können dann verkettet werden, um ein EditedMediaItemSequence zu erstellen. Sie können beispielsweise ein EditedMediaItemSequence mit zwei bearbeiteten Videos erstellen. Elemente in einem EditedMediaItemSequence werden sequenziell angeordnet und überschneiden sich nicht zeitlich.

Ein Composition ist die Kombination aus einem oder mehreren EditedMediaItemSequence-Objekten. Alle EditedMediaItemSequence-Objekte im Composition werden gemischt, sodass Sie Video- und Audio-Assets kombinieren können.

Composition-Objekte können mit Transformer exportiert werden.

Hier ist ein Beispiel für das Erstellen und Exportieren eines Video-Assets, das aus zwei bearbeiteten Videoclips besteht, die mit einem Audiotrack überlagert werden:

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);

Beispiele für unterstützte Anwendungsfälle

Hier ist eine unvollständige Liste der Anwendungsfälle, die die Transformer API mit Kompositionen unterstützt:

  • Audio-, Bild- und Video-Assets werden nacheinander kombiniert.
  • Hintergrundaudio zu einem Video-Asset hinzufügen
  • Einer Komposition Effekte hinzufügen
  • Tone Mapping von HDR-Eingaben zu SDR, um eine SDR-Ausgabe mit besserer visueller Qualität zu generieren.

Aktuelle Einschränkungen

Sequenzen innerhalb einer Komposition müssen die in Transformer.start() beschriebenen Bedingungen erfüllen. Außerdem werden die folgenden Vorgänge bei der Arbeit mit Kompositionen noch nicht unterstützt:

  • Video- oder Audiotracks überblenden

Funktionsanfragen

Wenn Sie Funktionsanfragen für die Transformer API haben, können Sie ein Problem im Media3-GitHub-Repository einreichen.