Menentukan Komposisi item media

Library Media3 Transformer menyediakan serangkaian alat untuk mengedit dan memanipulasi media. Komponen inti untuk pengeditan multi-aset adalah Composition API. API ini memungkinkan Anda mengatur beberapa item media input, seperti klip video, gambar, dan trek audio, ke dalam satu struktur koheren yang kemudian dapat diproses, dilihat pratinjaunya, atau diekspor. Composition dapat dianggap sebagai linimasa yang berisi satu atau beberapa urutan media. Setiap urutan (ditentukan oleh EditedMediaItemSequence) berisi item media individual (ditentukan sebagai instance EditedMediaItem). Transformasi dan efek dapat diterapkan ke individual EditedMediaItem, atau ke seluruh Composition.

Struktur objek Komposisi
Struktur objek Komposisi

Composition adalah titik entri Anda untuk berbagai kasus penggunaan dengan Media3 Transformer, seperti:

  • Menggabungkan aset audio, gambar, dan video secara berurutan.
  • Menempatkan video di atas video lain (picture-in-picture).
  • Mencampur trek audio latar belakang dengan urutan video.
  • Menerapkan efek visual atau audio di seluruh bagian yang diedit.
  • Menangani skenario kompleks seperti pemrosesan video HDR.

Panduan ini berfokus pada cara menentukan dan membuat objek Composition, termasuk class utama yang terlibat, cara membuat komposisi dasar dan yang lebih kompleks dengan satu atau beberapa urutan, dan cara menerapkan efek di berbagai level.

Konsep dan Class Utama

Untuk menggunakan Composition API secara efektif, penting untuk memahami class utama yang terlibat dalam membuat komposisi media:

Effects:

  • Tujuan: Objek Effects adalah kumpulan prosesor audio dan efek video.
  • Cara penggunaannya: Dalam konteks Composition, Effects dapat ditetapkan pada instance EditedMediaItem individual untuk mengubah klip tertentu, atau ke Composition secara keseluruhan (biasanya untuk efek Presentation yang memengaruhi output akhir, seperti menyesuaikan resolusi tampilan atau kecepatan frame).
  • Mengapa penting: Effects adalah mekanisme untuk menerapkan transformasi, filter, dan pemrosesan lainnya ke media Anda di tingkat item individual dan tingkat komposisi keseluruhan. Untuk mengetahui informasi selengkapnya, lihat Transformations.

EditedMediaItem:

  • Tujuan: Class ini mewakili satu bagian media (seperti file video, gambar, atau audio) dan pengeditan yang akan diterapkan padanya.
  • Cara penggunaannya: EditedMediaItem mengelompokkan MediaItem (yang mengarah ke konten media sebenarnya) dengan objek Effects.
  • Mengapa penting: Ini adalah blok penyusun dasar komposisi Anda. Dengan blok ini, Anda dapat menentukan dengan tepat media mana yang akan disertakan dan bagaimana tampilan serta suara setiap bagian individual sebelum digabungkan dengan bagian lain dalam urutan.

EditedMediaItemSequence:

  • Tujuan: Mewakili urutan linear objek EditedMediaItem yang dimaksudkan untuk diputar satu per satu.
  • Cara penggunaannya: EditedMediaItemSequence dibuat dengan daftar EditedMediaItem objek. Setiap urutan dalam Composition mirip dengan trek atau lapisan dalam linimasa pengeditan video multi-trek. Misalnya, satu urutan mungkin berisi klip video utama Anda, sementara urutan lain, yang tumpang-tindih dalam waktu, mungkin berisi klip video yang akan ditempatkan di atas yang pertama, dan urutan lain mungkin hanya berisi trek audio untuk musik latar belakang.
  • Mengapa penting: EditedMediaItemSequence mengelompokkan item media terkait yang harus mengikuti satu sama lain secara langsung. Dengan menggunakan beberapa urutan, Anda dapat membuat pengaturan yang lebih kompleks, seperti melapisi audio atau membuat overlay visual.

Composition:

  • Tujuan: Ini adalah objek level teratas yang mewakili seluruh linimasa media yang akan diproses. Objek ini bertindak sebagai penampung untuk semua urutan media dan setelan atau efek global yang berlaku untuk seluruh output.
  • Cara penggunaannya: A Composition terdiri dari satu atau beberapa EditedMediaItemSequence objek. Anda juga dapat menerapkan efek di seluruh komposisi dan menetapkan konfigurasi global seperti mode HDR langsung di Composition. Jika Composition berisi beberapa objek EditedMediaItemSequence, urutan ini dapat diatur untuk diputar secara berurutan atau dapat tumpang-tindih dalam waktu, sehingga memungkinkan tata letak yang ditempatkan di atas seperti picture-in-picture atau transisi dari satu urutan ke urutan lainnya.
  • Mengapa penting: A Composition menentukan struktur keseluruhan media input yang akan diproses, dan merupakan objek umum yang dapat Anda gunakan untuk melihat pratinjau pengeditan dengan CompositionPlayer dan mengekspor video output dengan pengeditan yang diterapkan menggunakan Transformer.

Membuat dan mengekspor Composition

Berikut adalah contoh pembuatan aset video yang terdiri dari dua klip video yang diedit, yang ditempatkan di atas trek audio, dan mengekspornya:

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

Contoh kasus penggunaan yang didukung

Berikut adalah daftar kasus penggunaan yang tidak lengkap yang didukung Transformer API dengan Composition:

  • Menggabungkan aset audio, gambar, dan video secara berurutan.
  • Menambahkan audio latar belakang ke aset video.
  • Menambahkan efek ke Komposisi.
  • Pemetaan nada input HDR ke SDR untuk menghasilkan output SDR dengan kualitas visual yang lebih baik.

Batasan saat ini

Urutan dalam Komposisi harus memenuhi kondisi yang diuraikan dalam Transformer.start(). Selain itu, operasi berikut belum didukung saat menggunakan Komposisi:

  • Crossfading trek video atau audio

Permintaan fitur

Jika Anda memiliki permintaan fitur untuk Transformer API, ajukan masalah di repositori GitHub Media3.