Biblioteka Media3 Transformer zawiera pakiet narzędzi do edytowania i manipulowania multimediami. Głównym komponentem do edycji wielu zasobów jest interfejs
Composition API. Ten interfejs API umożliwia łączenie wielu wejściowych elementów multimedialnych, takich jak klipy wideo, obrazy i ścieżki audio, w jedną spójną strukturę, którą można następnie przetwarzać, wyświetlać w podglądzie lub eksportować. Composition można traktować jako oś czasu, która zawiera co najmniej jedną sekwencję multimediów. Każda
sekwencja (zdefiniowana przez EditedMediaItemSequence) zawiera poszczególne
elementy multimedialne (zdefiniowane jako instancje EditedMediaItem).
Transformacje i efekty można stosować do poszczególnych elementów
EditedMediaItem, lub do całej Composition.
Composition to punkt wejścia dla różnych przypadków użycia w Media3 Transformer, takich jak:
- sekwencyjne łączenie komponentów audio, obrazów i wideo;
- nakładanie filmu na inny film (obraz w obrazie);
- miksowanie ścieżki audio tła z sekwencją wideo;
- stosowanie efektów wizualnych lub dźwiękowych do całego edytowanego materiału;
- obsługa złożonych scenariuszy, takich jak przetwarzanie filmów HDR.
W tym przewodniku dowiesz się, jak definiować i tworzyć obiekty Composition, w tym kluczowe klasy, jak tworzyć proste i bardziej złożone kompozycje z jedną lub kilkoma sekwencjami oraz jak stosować efekty na różnych poziomach.
Kluczowe pojęcia i klasy
Aby skutecznie korzystać z interfejsu API Composition, musisz poznać główne klasy używane do tworzenia kompozycji multimedialnej:
Effects:
- Cel: obiekt
Effectsto zbiór procesorów audio i efektów wideo. - Sposób użycia: w kontekście
CompositionobiektEffectsmożna ustawić w poszczególnych instancjachEditedMediaItem, aby modyfikować konkretne klipy, lub w całejComposition(zwykle w przypadku efektówPresentation, które wpływają na ostateczny wynik, np. dostosowanie rozdzielczości wyświetlania lub liczby klatek na sekundę). - Dlaczego jest ważny:
Effectsto mechanizm stosowania transformacji, filtrów i innych procesów do multimediów zarówno na poziomie poszczególnych elementów, jak i na poziomie całej kompozycji. Więcej informacji znajdziesz w sekcji zobaczTransformations.
EditedMediaItem:
- Cel: Ta klasa reprezentuje pojedynczy element multimedialny (np. plik wideo, obraz lub plik audio) oraz zmiany, które mają zostać w nim zastosowane.
- Sposób użycia:
EditedMediaItemgrupujeMediaItem(który wskazuje rzeczywistą treść multimedialną) z obiektemEffects. - Dlaczego jest ważny: jest to podstawowy element składowy twojej kompozycji. Umożliwia dokładne określenie, które multimedia mają zostać uwzględnione, oraz jak każdy element ma wyglądać i brzmieć, zanim zostanie połączony z innymi w sekwencji.
EditedMediaItemSequence:
- Cel: reprezentuje liniową sekwencję obiektów
EditedMediaItem, które mają być odtwarzane jeden po drugim. - Sposób użycia: Obiekt
EditedMediaItemSequencejest tworzony na podstawie listy obiektówEditedMediaItem. Każda sekwencja wCompositionjest podobna do ścieżki lub warstwy na osi czasu edycji wideo z wieloma ścieżkami. Na przykład jedna sekwencja może zawierać główne klipy wideo, a inna, nakładająca się w czasie, może zawierać klipy wideo, które mają być nakładane na pierwszą. Kolejna sekwencja może zawierać tylko ścieżkę audio z muzyką w tle. - Dlaczego jest ważny:
EditedMediaItemSequencegrupuje powiązane elementy multimedialne , które powinny następować bezpośrednio po sobie. Używając wielu sekwencji, możesz tworzyć bardziej złożone aranżacje, np. nakładać na siebie dźwięk lub tworzyć nakładki wizualne.
Composition:
- Cel: jest to obiekt najwyższego poziomu, który reprezentuje całą oś czasu multimediów do przetworzenia. Działa jako kontener dla wszystkich sekwencji multimedialnych oraz wszelkich ustawień globalnych lub efektów, które mają zastosowanie do całego wyniku.
- Sposób użycia:
Compositionskłada się z co najmniej 1 obiektuEditedMediaItemSequence. Możesz też stosować efekty w całej kompozycji i ustawiać konfiguracje globalne, takie jak tryb HDR, bezpośrednio wComposition. JeśliCompositionzawiera wiele obiektówEditedMediaItemSequence, można je ułożyć tak, aby odtwarzały się sekwencyjnie lub nakładały się w czasie, co umożliwia tworzenie nakładanych układów, takich jak obraz w obrazie, lub przejść z jednej sekwencji do drugiej. - Dlaczego jest ważny: A
Compositionokreśla ogólną strukturę multimediów wejściowych do przetworzenia i jest wspólnym obiektem, którego możesz używać zarówno do wyświetlania podglądu zmian za pomocąCompositionPlayer, jak i do eksportowania filmu wyjściowego ze zmianami zastosowanymi za pomocąTransformer.
Tworzenie i eksportowanie Composition
Oto przykład tworzenia komponentu wideo, który składa się z 2 edytowanych klipów wideo, na które nałożona jest ścieżka audio, oraz eksportowania go:
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);
Przykłady obsługiwanych przypadków użycia
Oto niepełna lista przypadków użycia, które są obsługiwane przez interfejs Transformer API za pomocą Composition:
- sekwencyjne łączenie komponentów audio, obrazów i wideo;
- dodawanie dźwięku w tle do komponentu wideo;
- dodawanie efektów do kompozycji;
- mapowanie tonów z wejścia HDR na SDR w celu uzyskania lepszej jakości obrazu w wyjściu SDR.
Aktualne ograniczenia
Sekwencje w kompozycji muszą spełniać warunki określone w
Transformer.start().
Ponadto podczas pracy z kompozycjami nie są jeszcze obsługiwane te operacje:
- przenikanie ścieżek audio lub wideo.
Prośby o dodanie funkcji
Jeśli masz prośby o dodanie funkcji do interfejsów Transformer API, zgłoś problem w repozytorium Media3 na GitHubie.