Zusammensetzung von Mediendateien definieren

Die Media3 Transformer-Bibliothek bietet eine Reihe von Tools zum Bearbeiten und Manipulieren von Medien. Eine Kernkomponente für die Bearbeitung mehrerer Assets ist die Composition API. Mit dieser API können Sie mehrere Eingabe-Medienelemente wie Videoclips, Bilder und Audiotracks in einer einzigen, zusammenhängenden Struktur anordnen, die dann verarbeitet, in der Vorschau angezeigt oder exportiert werden kann. Eine Composition kann als Zeitachse betrachtet werden, die eine oder mehrere Sequenzen von Medien enthält. Jede Sequenz (definiert durch eine EditedMediaItemSequence) enthält einzelne Medienelemente (definiert als EditedMediaItem-Instanzen). Transformationen und Effekte können auf ein einzelnes EditedMediaItem, oder auf eine gesamte Composition angewendet werden.

Struktur eines Composition-Objekts
Struktur eines Composition-Objekts

Eine Composition ist der Einstiegspunkt für eine Vielzahl von Anwendungsfällen mit Media3 Transformer, z. B.:

  • Audio-, Bild- und Video-Assets sequenziell kombinieren
  • Ein Video über ein anderes Video legen (Bild-in-Bild)
  • Einen Hintergrund-Audiotrack mit einer Videosequenz mischen
  • Visuelle oder Audioeffekte auf das gesamte bearbeitete Stück anwenden
  • Komplexe Szenarien wie die HDR-Videoverarbeitung verarbeiten

In dieser Anleitung wird beschrieben, wie Sie Composition-Objekte definieren und erstellen. Dazu gehören die wichtigsten Klassen, das Erstellen einfacher und komplexerer Kompositionen mit einer oder mehreren Sequenzen und das Anwenden von Effekten auf verschiedenen Ebenen.

Wichtige Konzepte und Klassen

Um die Composition API effektiv zu nutzen, ist es wichtig, die wichtigsten Klassen zu verstehen, die beim Erstellen einer Medienkomposition verwendet werden:

Effects:

  • Zweck: Ein Effects-Objekt ist eine Sammlung von Audioprozessoren und Videoeffekten.
  • Verwendung: Im Kontext einer Composition kann ein Effects auf einzelne EditedMediaItem-Instanzen angewendet werden, um bestimmte Clips zu ändern, oder auf die Composition als Ganzes (in der Regel für Presentation-Effekte, die sich auf die endgültige Ausgabe auswirken, z. B. zum Anpassen der Auflösung oder Bildrate).
  • Bedeutung: Effects ist der Mechanismus zum Anwenden von Transformationen, Filtern und anderen Verarbeitungsschritten auf Ihre Medien, sowohl auf der Ebene einzelner Elemente als auch auf der Ebene der Gesamtkomposition. Weitere Informationen finden Sie unter Transformations.

EditedMediaItem:

  • Zweck:Diese Klasse stellt ein einzelnes Medienelement (z. B. eine Video-, Bild- oder Audiodatei) und die darauf anzuwendenden Bearbeitungen dar.
  • Verwendung: Ein EditedMediaItem gruppiert ein MediaItem (das auf den tatsatzlichen Medieninhalt verweist) mit einem Effects Objekt.
  • Bedeutung:Dies ist der grundlegende Baustein Ihrer Komposition. Sie können genau festlegen, welche Medien eingefügt werden sollen und wie die einzelnen Elemente aussehen und klingen sollen, bevor sie in einer Sequenz mit anderen kombiniert werden.

EditedMediaItemSequence:

  • Zweck:Stellt eine lineare Sequenz von EditedMediaItem-Objekten dar, die nacheinander abgespielt werden sollen.
  • Verwendung: Eine EditedMediaItemSequence wird mit einer Liste von EditedMediaItem-Objekten erstellt. Jede Sequenz in einer Composition ähnelt einem Track oder einer Ebene in einer mehrspurigen Videobearbeitungszeitachse. Eine Sequenz kann beispielsweise Ihre Hauptvideoclips enthalten, während eine andere Sequenz, die sich zeitlich überschneidet, Videoclips enthält, die über die erste gelegt werden sollen. Eine weitere Sequenz kann nur einen Audiotrack für die Hintergrundmusik enthalten.
  • Bedeutung: Eine EditedMediaItemSequence gruppiert verwandte Medien elemente, die direkt aufeinander folgen sollen. Mit mehreren Sequenzen können Sie komplexere Anordnungen erstellen, z. B. Audio überlagern oder visuelle Überlagerungen erstellen.

Composition:

  • Zweck:Dies ist das Objekt der obersten Ebene, das die gesamte Zeitachse der zu verarbeitenden Medien darstellt. Es dient als Container für alle Mediensequenzen und alle globalen Einstellungen oder Effekte, die auf die gesamte Ausgabe angewendet werden.
  • Verwendung: Eine Composition besteht aus einem oder mehreren EditedMediaItemSequence-Objekten. Sie können auch kompositionsweite Effekte anwenden und globale Konfigurationen wie den HDR-Modus direkt in der Composition festlegen. Wenn eine Composition mehrere EditedMediaItemSequence-Objekte enthält, können diese Sequenzen so angeordnet werden, dass sie sequenziell abgespielt werden oder sich zeitlich überschneiden. So lassen sich überlagerte Layouts wie Bild-in-Bild oder Übergänge von einer Sequenz zur nächsten erstellen.
  • Bedeutung: Eine Composition definiert die Gesamtstruktur der zu verarbeitenden Eingabemedien und ist ein gemeinsames Objekt, das Sie sowohl für die Vorschau von Bearbeitungen mit einem CompositionPlayer als auch für den Export eines Ausgabevideos mit angewendeten Bearbeitungen mit Transformer verwenden können.

Composition erstellen und exportieren

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

Kotlin

val video1 = EditedMediaItem.Builder(MediaItem.fromUri(video1Uri)).build()

val video2 = EditedMediaItem.Builder(MediaItem.fromUri(video2Uri)).build()

val videoSequence = EditedMediaItemSequence.withAudioAndVideoFrom(listOf(video1, video2))

val backgroundAudio = EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build()

val backgroundAudioSequence =
  EditedMediaItemSequence.withAudioFrom(listOf(backgroundAudio))
    .buildUpon()
    .setIsLooping(true) // Loop audio track through duration of videoSequence
    .build()

val composition = Composition.Builder(videoSequence, backgroundAudioSequence).build()

transformer.start(composition, filePath)

Java

EditedMediaItem video1 = new EditedMediaItem.Builder(MediaItem.fromUri(video1Uri)).build();

EditedMediaItem video2 = new EditedMediaItem.Builder(MediaItem.fromUri(video2Uri)).build();

EditedMediaItemSequence videoSequence =
    EditedMediaItemSequence.withAudioAndVideoFrom(ImmutableList.of(video1, video2));

EditedMediaItem backgroundAudio =
    new EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build();

EditedMediaItemSequence backgroundAudioSequence =
    EditedMediaItemSequence.withAudioFrom(ImmutableList.of(backgroundAudio))
        .buildUpon()
        .setIsLooping(true) // Loop audio track through duration of videoSequence
        .build();

Composition composition =
    new Composition.Builder(videoSequence, backgroundAudioSequence).build();

transformer.start(composition, filePath);

Beispiele für unterstützte Anwendungsfälle

Dies ist eine unvollständige Liste von Anwendungsfällen, die die Transformer API mit Composition unterstützt:

  • Audio-, Bild- und Video-Assets sequenziell kombinieren
  • Einem Video-Asset Hintergrundaudio hinzufügen
  • Einer Komposition Effekte hinzufügen
  • HDR-Eingabe in SDR umwandeln, um eine SDR-Ausgabe mit besserer visueller Qualität zu generieren

Aktuelle Beschränkungen

Sequenzen in 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

Feature Requests

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