Za pomocą narzędzia Transformer możesz łączyć różne komponenty multimedialne, takie jak filmy, obrazy i pliki audio, aby tworzyć Composition.
Eksportowanie kompozycji
Aby zastosować przekształcenia (np. efekty lub przycinanie) do elementu MediaItem, utwórz element EditedMediaItem, który będzie reprezentować zasób z zastosowanymi przekształceniami.
Obiekty EditedMediaItem można następnie połączyć, aby utworzyć EditedMediaItemSequence.
Możesz na przykład utworzyć EditedMediaItemSequence z 2 zmontowanymi filmami. Elementy w EditedMediaItemSequence są uporządkowane sekwencyjnie i nie nakładają się w czasie.
Composition to połączenie co najmniej 1 EditedMediaItemSequenceobiektu. Wszystkie EditedMediaItemSequenceobiekty w Composition są mieszane, co umożliwia łączenie zasobów wideo i audio.
Obiekty Composition można eksportować za pomocą narzędzia Transformer.
Oto przykład tworzenia i eksportowania zasobu wideo składającego się z 2 edytowanych klipów wideo z nałożoną ścieżką audio:
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);
Przykłady obsługiwanych przypadków użycia
Oto niepełna lista przypadków użycia, które interfejs Transformer API obsługuje w przypadku kompozycji:
- sekwencyjne łączenie komponentów audio, obrazów i filmów;
- Dodawanie dźwięku w tle do komponentu wideo.
- Dodawanie efektów do kompozycji.
- Mapowanie tonów z wejściowego sygnału HDR na SDR w celu uzyskania lepszej jakości obrazu w formacie SDR.
Obecne 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 i wideo
Prośby o dodanie funkcji
Jeśli masz jakieś propozycje dotyczące interfejsu Transformer API, zgłoś problem w repozytorium Media3 na GitHubie.