Za pomocą Transformer możesz łączyć wiele zasobów multimedialnych, takich jak filmy,
plików graficznych i audio, aby utworzyć Composition
.
Eksportowanie kompozycji
Aby zastosować przekształcenia,
(np. efekty lub przycinanie) do elementu MediaItem
, musisz utworzyć
EditedMediaItem
aby przedstawić zasób, do którego zastosowano przekształcenia.
Możesz połączyć EditedMediaItem
obiektu, aby utworzyć
EditedMediaItemSequence
Można na przykład utworzyć EditedMediaItemSequence
z 2 edytowanymi
filmy. Elementy w elemencie EditedMediaItemSequence
są porządkowane kolejno
nie nakładają się w czasie.
Wartość Composition
jest kombinacją co najmniej jednego elementu EditedMediaItemSequence
obiektów. Wszystkie obiekty EditedMediaItemSequence
w Composition
są wymieszane
co pozwala na łączenie zasobów wideo i audio.
Obiekty (Composition
) można wyeksportować za pomocą Transformera.
Oto przykład tworzenia i eksportowania zasobu wideo, który składa się z 2 elementów wyedytowane klipy wideo z nałożonymi ścieżką dźwiękową:
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( video1, video2) val backgroundAudio = EditedMediaItem.Builder( MediaItem.fromUri(audioUri)) .build() val backgroundAudioSequence = EditedMediaItemSequence( ImmutableList.of(backgroundAudio), /* isLooping= */ true) // Loop audio track through duration of videoSequence 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( video1, video2); EditedMediaItem backgroundAudio = new EditedMediaItem.Builder( MediaItem.fromUri(audioUri)) .build(); EditedMediaItemSequence backgroundAudioSequence = new EditedMediaItemSequence( ImmutableList.of(backgroundAudio), /* isLooping= */ true); // Loop audio track through duration of videoSequence 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
To niepełna lista przypadków użycia interfejsu Transformer API obsługuje kompozycje:
- Łączenie sekwencyjne z komponentami audio, wideo i graficznymi Jednak wszystkie elementy w sekwencji musi mieć te same ścieżki. Na przykład nie możesz mieć sekwencji który zawiera sam dźwięk, a po nim plik wideo.
- Dodaję dźwięk w tle do zasobu wideo.
- Dodawanie efektów do kompozycji.
- Mapowanie tonów wejściowych HDR na SDR pozwala uzyskać lepszą jakość obrazu wyjściowego SDR.
Obecne ograniczenia
Sekwencje w kompozycji muszą spełniać warunki opisane w
Transformer.start()
Następujące operacje nie są jeszcze obsługiwane podczas pracy z
Kompozycje:
- Rozpoczynam odtwarzanie filmu
EditedMediaItemSequence
z przesunięciem. - Przenikanie ścieżek wideo lub audio
Prośby o dodanie funkcji
Jeśli masz jakieś prośby o dodanie funkcji do interfejsu Transformer API, zgłoś problem na Repozytorium Media3 GitHub.