Edytowanie wielu zasobów

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.

„Kompozycja” Obiekty można eksportować 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 tylko 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.