Çok öğeli düzenleme

Transformer'ı kullanarak videolar, resimler ve ses dosyaları gibi birden fazla medya öğesini birleştirip Composition oluşturabilirsiniz.

Kompozisyonu dışa aktarma

MediaItem öğesine dönüşümler (ör. efektler veya kırpma düzenlemeleri) uygulamak için, dönüşümlerin uygulandığı öğeyi temsil eden bir EditedMediaItem oluşturmanız gerekir.

EditedMediaItem nesneleri daha sonra birleştirilerek EditedMediaItemSequence oluşturulabilir. Örneğin, düzenlenmiş iki videonun yer aldığı bir EditedMediaItemSequence oluşturabilirsiniz. EditedMediaItemSequence içindeki öğeler sırayla sipariş edilir ve zaman içinde çakışmaz.

Composition, bir veya daha fazla EditedMediaItemSequence nesnesinin birleşimidir. EditedMediaItemSequence içindeki tüm Composition nesneler karıştırılır. Böylece video ve ses öğelerini birleştirebilirsiniz.

Composition nesneleri Transformer kullanılarak dışa aktarılabilir.

İki düzenlenmiş video klibi içeren ve üzerine ses parçası eklenmiş bir video öğesi oluşturup dışa aktarma örneğini aşağıda bulabilirsiniz:

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);

Desteklenen kullanım alanlarına örnekler

Aşağıda, Transformer API'nin Compositions ile desteklediği kullanım alanlarının olası her örneğe yer vermeyen bir listesi verilmiştir:

  • Ses, resim ve video öğelerini sırayla birleştirme.
  • Video öğesine arka plan sesi ekleme
  • Kompozisyona efekt ekleme
  • Daha iyi görsel kalitede SDR çıkışı oluşturmak için HDR girişini SDR'ye ton eşleme.

Mevcut sınırlamalar

Bir Bileşen içindeki adım sıraları, Transformer.start() bölümünde belirtilen koşulları karşılamalıdır. Ayrıca, Kompozisyonlarla çalışırken aşağıdaki işlemler henüz desteklenmemektedir:

  • Video veya ses parçaları arasında geçiş yapma

Özellik istekleri

Transformer API ile ilgili özellik istekleriniz varsa Media3 GitHub deposunda sorun bildirin.