Edytowanie wielu zasobów

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.