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.
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
Compositionkann einEffectsauf einzelneEditedMediaItem-Instanzen angewendet werden, um bestimmte Clips zu ändern, oder auf dieCompositionals Ganzes (in der Regel fürPresentation-Effekte, die sich auf die endgültige Ausgabe auswirken, z. B. zum Anpassen der Auflösung oder Bildrate). - Bedeutung:
Effectsist 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 unterTransformations.
EditedMediaItem:
- Zweck:Diese Klasse stellt ein einzelnes Medienelement (z. B. eine Video-, Bild- oder Audiodatei) und die darauf anzuwendenden Bearbeitungen dar.
- Verwendung: Ein
EditedMediaItemgruppiert einMediaItem(das auf den tatsatzlichen Medieninhalt verweist) mit einemEffectsObjekt. - 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
EditedMediaItemSequencewird mit einer Liste vonEditedMediaItem-Objekten erstellt. Jede Sequenz in einerCompositionä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
EditedMediaItemSequencegruppiert 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
Compositionbesteht aus einem oder mehrerenEditedMediaItemSequence-Objekten. Sie können auch kompositionsweite Effekte anwenden und globale Konfigurationen wie den HDR-Modus direkt in derCompositionfestlegen. Wenn eineCompositionmehrereEditedMediaItemSequence-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
Compositiondefiniert die Gesamtstruktur der zu verarbeitenden Eingabemedien und ist ein gemeinsames Objekt, das Sie sowohl für die Vorschau von Bearbeitungen mit einemCompositionPlayerals auch für den Export eines Ausgabevideos mit angewendeten Bearbeitungen mitTransformerverwenden 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.