Chỉnh sửa nhiều thành phần

Khi sử dụng Transformer, bạn có thể kết hợp nhiều thành phần đa phương tiện, chẳng hạn như video, hình ảnh và tệp âm thanh để tạo Composition.

Xuất thành phần

Để áp dụng các phép biến đổi (chẳng hạn như hiệu ứng hoặc chỉnh sửa cắt) cho MediaItem, bạn nên tạo EditedMediaItem để biểu thị thành phần có các phép biến đổi được áp dụng.

Sau đó, bạn có thể nối các đối tượng EditedMediaItem với nhau để tạo EditedMediaItemSequence. Ví dụ: bạn có thể tạo một EditedMediaItemSequence có 2 video đã chỉnh sửa. Các mục trong EditedMediaItemSequence được sắp xếp tuần tự và không trùng lặp theo thời gian.

Composition là sự kết hợp của một hoặc nhiều đối tượng EditedMediaItemSequence. Tất cả các đối tượng EditedMediaItemSequence trong Composition đều được kết hợp với nhau, cho phép bạn kết hợp các thành phần video và âm thanh.

Bạn có thể xuất các đối tượng Composition bằng Transformer.

Dưới đây là ví dụ về cách tạo và xuất một tài sản video bao gồm 2 đoạn video đã chỉnh sửa, được phủ lên một bản âm thanh:

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

Ví dụ về các trường hợp sử dụng được hỗ trợ

Đây là danh sách không đầy đủ về các trường hợp sử dụng mà Transformer API hỗ trợ bằng Thành phần:

  • Kết hợp tuần tự các thành phần âm thanh, hình ảnh và video.
  • Thêm âm thanh nền vào một thành phần video.
  • Thêm hiệu ứng vào một Thành phần.
  • Ánh xạ tông màu đầu vào HDR sang SDR để tạo đầu ra SDR có chất lượng hình ảnh tốt hơn.

Các điểm hạn chế hiện tại

Các trình tự trong một Cấu trúc sử dụng phải đáp ứng các điều kiện được nêu trong Transformer.start(). Ngoài ra, các thao tác sau đây hiện chưa được hỗ trợ khi làm việc với Thành phần:

  • Chồng chéo các bản âm thanh hoặc video

Yêu cầu về tính năng

Nếu bạn có yêu cầu về tính năng cho Transformer API, hãy báo cáo vấn đề trên kho lưu trữ Media3 GitHub.