Xác định một thành phần gồm các mục nội dung nghe nhìn

Thư viện Media3 Transformer cung cấp một bộ công cụ để chỉnh sửa và thao tác với nội dung nghe nhìn. Một thành phần cốt lõi để chỉnh sửa nhiều thành phần là API Composition. API này cho phép bạn sắp xếp nhiều mục nội dung nghe nhìn đầu vào (chẳng hạn như đoạn video, hình ảnh và bản âm thanh) thành một cấu trúc duy nhất, mạch lạc mà sau đó có thể được xử lý, xem trước hoặc xuất. Bạn có thể coi Composition là một dòng thời gian chứa một hoặc nhiều chuỗi nội dung nghe nhìn. Mỗi chuỗi (được xác định bằng EditedMediaItemSequence) chứa các mục nội dung nghe nhìn riêng lẻ (được xác định là các thực thể EditedMediaItem). Bạn có thể áp dụng các hiệu ứng và biến đổi cho một EditedMediaItem riêng lẻ hoặc cho toàn bộ Composition.

Cấu trúc của đối tượng Thành phần
Cấu trúc của đối tượng Thành phần

Composition là điểm truy cập của bạn cho nhiều trường hợp sử dụng với Media3 Transformer, chẳng hạn như:

  • Kết hợp tuần tự các thành phần âm thanh, hình ảnh và video.
  • Chồng một video lên trên một video khác (chế độ hình trong hình).
  • Trộn bản âm thanh nền với một chuỗi video.
  • Áp dụng hiệu ứng hình ảnh hoặc âm thanh cho toàn bộ đoạn video đã chỉnh sửa.
  • Xử lý các trường hợp phức tạp như xử lý video HDR.

Hướng dẫn này tập trung vào cách xác định và tạo các đối tượng Composition, bao gồm cả các lớp chính có liên quan, cách tạo các thành phần cơ bản và phức tạp hơn bằng một hoặc nhiều chuỗi, cũng như cách áp dụng hiệu ứng ở các cấp độ khác nhau.

Các khái niệm và lớp chính

Để sử dụng API Composition một cách hiệu quả, bạn cần hiểu rõ các lớp chính liên quan đến việc tạo thành phần đa phương tiện:

Effects:

  • Mục đích: Đối tượng Effects là một tập hợp gồm bộ xử lý âm thanhhiệu ứng video.
  • Cách sử dụng: Trong ngữ cảnh của Composition, bạn có thể đặt Effects trên từng phiên bản EditedMediaItem để sửa đổi các đoạn video cụ thể hoặc trên Composition nói chung (thường là cho các hiệu ứng Presentation ảnh hưởng đến đầu ra cuối cùng, chẳng hạn như điều chỉnh độ phân giải màn hình hoặc tốc độ khung hình).
  • Lý do cần thiết: Effects là cơ chế để áp dụng các phép biến đổi, bộ lọc và quy trình xử lý khác cho nội dung nghe nhìn của bạn ở cả cấp độ từng mục và cấp độ thành phần tổng thể. Để biết thêm thông tin, hãy xem Transformations.

EditedMediaItem:

  • Mục đích: Lớp này đại diện cho một phần nội dung nghe nhìn (chẳng hạn như tệp video, hình ảnh hoặc âm thanh) và các nội dung chỉnh sửa sẽ được áp dụng cho phần nội dung đó.
  • Cách sử dụng: EditedMediaItem nhóm một MediaItem (trỏ đến nội dung đa phương tiện thực tế) với một đối tượng Effects.
  • Tại sao điều này quan trọng: Đây là thành phần nền tảng của bố cục của bạn. Công cụ này cho phép bạn xác định chính xác nội dung nghe nhìn cần đưa vào và cách từng phần nội dung riêng lẻ xuất hiện và phát âm thanh trước khi được kết hợp với các phần khác trong một chuỗi.

EditedMediaItemSequence:

  • Mục đích: Thể hiện một chuỗi tuyến tính gồm các đối tượng EditedMediaItem được dự định phát lần lượt.
  • Cách sử dụng: EditedMediaItemSequence được tạo bằng danh sách các đối tượng EditedMediaItem. Mỗi chuỗi trong một Composition tương tự như một bản âm thanh hoặc lớp trong dòng thời gian chỉnh sửa video nhiều bản âm thanh. Ví dụ: một chuỗi có thể chứa các đoạn video chính của bạn, trong khi một chuỗi khác (chồng chéo về thời gian) có thể chứa các đoạn video sẽ được phủ lên chuỗi đầu tiên, và một chuỗi khác nữa có thể chỉ chứa một bản âm thanh cho nhạc nền.
  • Lý do cần thiết: EditedMediaItemSequence nhóm các mục nội dung nghe nhìn có liên quan và cần xuất hiện ngay sau nhau. Bằng cách sử dụng nhiều chuỗi, bạn có thể tạo ra những bản sắp xếp phức tạp hơn, chẳng hạn như xếp lớp âm thanh hoặc tạo lớp phủ trực quan.

Composition:

  • Mục đích: Đây là đối tượng cấp cao nhất, đại diện cho toàn bộ dòng thời gian của nội dung nghe nhìn cần xử lý. Đây là một vùng chứa cho tất cả các chuỗi nội dung nghe nhìn và mọi chế độ cài đặt hoặc hiệu ứng chung áp dụng cho toàn bộ đầu ra.
  • Cách sử dụng: Composition bao gồm một hoặc nhiều đối tượng EditedMediaItemSequence. Bạn cũng có thể áp dụng các hiệu ứng trên toàn bộ thành phần và đặt các cấu hình chung như chế độ HDR ngay trên Composition. Nếu Composition chứa nhiều đối tượng EditedMediaItemSequence, thì bạn có thể sắp xếp các chuỗi này để phát tuần tự hoặc có thể chồng lên nhau theo thời gian, cho phép bố cục chồng lên nhau như chế độ hình trong hình hoặc chuyển đổi từ chuỗi này sang chuỗi khác.
  • Lý do quan trọng: Composition xác định cấu trúc tổng thể của nội dung nghe nhìn đầu vào cần xử lý và là một đối tượng chung mà bạn có thể dùng cho cả xem trước nội dung chỉnh sửa bằng CompositionPlayerxuất video đầu ra có nội dung chỉnh sửa được áp dụng bằng Transformer.

Tạo và xuất Composition

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

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

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

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

  • 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 Cảnh kết hợp.
  • Á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.