Medya öğelerinin kompozisyonunu tanımlama

Media3 Transformer kitaplığı, medyayı düzenlemek ve değiştirmek için bir dizi araç sunar. Çoklu öğe düzenlemenin temel bileşeni Composition API'sidir. Bu API, video klipler, resimler ve ses parçaları gibi birden fazla giriş medya öğesini, işlenebilen, önizlenebilen veya dışa aktarılabilen tek ve tutarlı bir yapıda düzenlemenize olanak tanır. Composition, bir veya daha fazla medya dizisini içeren bir zaman çizelgesi olarak düşünülebilir. Her bir dizi (EditedMediaItemSequence ile tanımlanır) ayrı medya öğeleri (EditedMediaItem örnekleri olarak tanımlanır) içerir. Dönüşümler ve efektler tek bir EditedMediaItem veya tüm Composition için uygulanabilir.

Bileşim nesnesinin yapısı
Beste nesnesinin yapısı

Composition, Media3 Transformer ile çeşitli kullanım alanlarına yönelik giriş noktanızdır. Örneğin:

  • Ses, resim ve video öğelerini sırayla birleştirme.
  • Bir videoyu başka bir videonun üzerine yerleştirme (pencere içinde pencere)
  • Arka plan ses parçasını video dizisiyle karıştırma
  • Düzenlenen bir içeriğin tamamına görsel veya ses efektleri uygulama
  • HDR video işleme gibi karmaşık senaryoları işleme

Bu kılavuzda, Composition nesnelerinin nasıl tanımlanacağı ve oluşturulacağı (ilgili temel sınıflar, tek veya birden fazla sıralamayla temel ve daha karmaşık kompozisyonların nasıl oluşturulacağı ve efektlerin farklı seviyelerde nasıl uygulanacağı dahil) ele alınmaktadır.

Temel Kavramlar ve Sınıflar

Composition API'yi etkili bir şekilde kullanmak için medya kompozisyonu oluşturmayla ilgili temel sınıfları anlamak önemlidir:

Effects:

  • Amaç: Effects nesnesi, ses işlemcileri ve video efektlerinden oluşan bir koleksiyondur.
  • Kullanım şekli: Composition bağlamında, belirli klipleri değiştirmek için Effects, tek tek EditedMediaItem örneklerinde veya Composition'nin tamamında (genellikle ekran çözünürlüğünü ya da kare hızını ayarlama gibi nihai çıktıyı etkileyen Presentation efektleri için) ayarlanabilir.
  • Önemi: Effects, hem tek tek öğe düzeyinde hem de genel kompozisyon düzeyinde medyalarınıza dönüştürme, filtre ve diğer işlemlerin uygulanmasını sağlayan mekanizmadır. Daha fazla bilgi için Transformations sayfasına bakın.

EditedMediaItem:

  • Amaç: Bu sınıf, tek bir medya öğesini (ör. video, resim veya ses dosyası) ve bu öğeye uygulanacak düzenlemeleri temsil eder.
  • Kullanım şekli: Bir EditedMediaItem, Effects nesnesiyle MediaItem (gerçek medya içeriğini gösterir) gruplandırır.
  • Önemi: Bu, kompozisyonunuzun temel yapı taşıdır. Bu özellik, hangi medyanın dahil edileceğini ve her bir parçanın bir dizide diğerleriyle birleştirilmeden önce nasıl görüneceğini ve duyulacağını tam olarak tanımlamanıza olanak tanır.

EditedMediaItemSequence:

  • Amaç: Birbiri ardına oynatılması amaçlanan EditedMediaItem nesnelerin doğrusal bir dizisini temsil eder.
  • Nasıl kullanılır: EditedMediaItemSequence, EditedMediaItem nesnelerinin listesiyle oluşturulur. Composition içindeki her dizi, çok parçalı bir video düzenleme zaman çizelgesindeki bir parçaya veya katmana benzer. Örneğin, bir dizide ana video klipleriniz yer alırken zaman açısından çakışan başka bir dizide, ilk dizinin üzerine yerleştirilecek video klipler bulunabilir. Başka bir dizide ise yalnızca arka plan müziği için bir ses parçası yer alabilir.
  • Neden önemlidir? EditedMediaItemSequence, doğrudan birbirini takip etmesi gereken ilgili medya öğelerini gruplandırır. Birden fazla sıra kullanarak ses katmanları oluşturma veya görsel yer paylaşımları oluşturma gibi daha karmaşık düzenlemeler yapabilirsiniz.

Composition:

  • Amaç: Bu, işlenecek medyanın tüm zaman çizelgesini temsil eden en üst düzey nesnedir. Tüm medya dizileri ve çıkışın tamamı için geçerli olan genel ayarlar veya efektler için kapsayıcı görevi görür.
  • Kullanım şekli: Composition, bir veya daha fazla EditedMediaItemSequence nesnesinden oluşur. Ayrıca, kompozisyon genelinde efektler uygulayabilir ve HDR modu gibi genel yapılandırmaları doğrudan Composition üzerinde ayarlayabilirsiniz. Bir Composition birden fazla EditedMediaItemSequence nesne içeriyorsa bu diziler sırayla oynatılacak şekilde düzenlenebilir veya zaman içinde çakışabilir. Bu sayede, resim içinde resim gibi yer paylaşımlı düzenler ya da bir diziden diğerine geçişler yapılabilir.
  • Neden önemlidir? Composition, işlenecek giriş medyasının genel yapısını tanımlar ve hem CompositionPlayer ile düzenlemeleri önizlemek hem de Transformer kullanılarak uygulanan düzenlemelerle bir çıkış videosu dışa aktarmak için kullanabileceğiniz ortak bir nesnedir.

Composition oluşturma ve dışa aktarma

İki düzenlenmiş video klibinden oluşan, üzerine ses parçası eklenmiş bir video öğesi oluşturma ve dışa aktarma örneğini aşağıda bulabilirsiniz:

Kotlin

val video1 = EditedMediaItem.Builder(MediaItem.fromUri(video1Uri)).build()

val video2 = EditedMediaItem.Builder(MediaItem.fromUri(video2Uri)).build()

val videoSequence = EditedMediaItemSequence.withAudioAndVideoFrom(listOf(video1, video2))

val backgroundAudio = EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build()

val backgroundAudioSequence =
  EditedMediaItemSequence.withAudioFrom(listOf(backgroundAudio))
    .buildUpon()
    .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 =
    EditedMediaItemSequence.withAudioAndVideoFrom(ImmutableList.of(video1, video2));

EditedMediaItem backgroundAudio =
    new EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build();

EditedMediaItemSequence backgroundAudioSequence =
    EditedMediaItemSequence.withAudioFrom(ImmutableList.of(backgroundAudio))
        .buildUpon()
        .setIsLooping(true) // Loop audio track through duration of videoSequence
        .build();

Composition composition =
    new Composition.Builder(videoSequence, backgroundAudioSequence).build();

transformer.start(composition, filePath);

Desteklenen kullanım alanlarına örnekler

Aşağıda, Transformer API'nin Composition ile desteklediği kullanım alanlarının eksiksiz olmayan 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 Kompozisyon 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'leriyle ilgili özellik istekleriniz varsa Media3 GitHub deposunda sorun kaydı oluşturun.