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ą:
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)
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.