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 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() 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 = 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(); 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 komponentów wideo;
- 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.