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 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.