미디어 항목의 컴포지션 정의

Media3 Transformer 라이브러리는 미디어를 수정하고 조작하기 위한 도구 모음을 제공합니다. 다중 애셋 수정의 핵심 구성요소는 Composition API입니다. 이 API를 사용하면 동영상 클립, 이미지, 오디오 트랙과 같은 여러 입력 미디어 항목을 처리, 미리보기 또는 내보낼 수 있는 일관된 단일 구조로 정렬할 수 있습니다. Composition은 하나 이상의 미디어 시퀀스를 보유하는 타임라인으로 생각할 수 있습니다. 각 시퀀스 (EditedMediaItemSequence로 정의됨)에는 개별 미디어 항목 (EditedMediaItem 인스턴스로 정의됨)이 포함됩니다. 변환 및 효과는 개별 EditedMediaItem 또는 전체 Composition에 적용할 수 있습니다.

Composition 객체의 구조
Composition 객체의 구조

Composition은 다음과 같은 Media3 Transformer의 다양한 사용 사례를 위한 진입점입니다.

  • 오디오, 이미지, 동영상 애셋을 순차적으로 결합합니다.
  • 다른 동영상 위에 동영상을 오버레이합니다 (PIP).
  • 배경 오디오 트랙을 동영상 시퀀스와 믹싱합니다.
  • 수정된 전체 콘텐츠에 시각적 또는 오디오 효과를 적용합니다.
  • HDR 동영상 처리와 같은 복잡한 시나리오를 처리합니다.

이 가이드에서는 관련된 주요 클래스, 단일 또는 다중 시퀀스로 기본 및 더 복잡한 컴포지션을 만드는 방법, 다양한 수준에서 효과를 적용하는 방법을 비롯하여 Composition 객체를 정의하고 빌드하는 방법을 중점적으로 설명합니다.

주요 개념 및 클래스

Composition API를 효과적으로 사용하려면 미디어 컴포지션 구성과 관련된 주요 클래스를 이해하는 것이 중요합니다.

Effects:

  • 목적: Effects 객체는 오디오 프로세서동영상 효과의 모음입니다.
  • 사용 방법: Composition의 컨텍스트에서 개별 EditedMediaItem 인스턴스에 Effects를 설정하여 특정 클립을 수정하거나 전체 Composition에 설정할 수 있습니다 (일반적으로 디스플레이 해상도 또는 프레임 속도 조정과 같이 최종 출력에 영향을 미치는 Presentation 효과에 사용됨).
  • 중요한 이유: Effects는 개별 항목 수준과 전체 컴포지션 수준 모두에서 변환, 필터, 기타 처리를 미디어에 적용하는 메커니즘입니다. 자세한 내용은 Transformations를 참고하세요.

EditedMediaItem:

  • 목적: 이 클래스는 단일 미디어 (예: 동영상, 이미지 또는 오디오 파일)와 적용할 수정사항을 나타냅니다.
  • 사용 방법: EditedMediaItem은 실제 미디어 콘텐츠를 가리키는 MediaItemEffects 객체와 그룹화합니다.
  • 중요한 이유: 이는 컴포지션의 기본 빌딩 블록입니다. 이를 통해 포함할 미디어를 정확하게 정의하고 각 개별 콘텐츠가 시퀀스의 다른 콘텐츠와 결합되기 전에 어떻게 보이고 들려야 하는지 정의할 수 있습니다.

EditedMediaItemSequence:

  • 목적: 순차적으로 재생할 EditedMediaItem 객체의 선형 시퀀스를 나타냅니다.
  • 사용 방법: EditedMediaItemSequenceEditedMediaItem 객체 목록으로 구성됩니다. Composition 내의 각 시퀀스는 다중 트랙 동영상 수정 타임라인의 트랙 또는 레이어와 유사합니다. 예를 들어 한 시퀀스에는 기본 동영상 클립이 포함될 수 있고, 시간상 겹치는 다른 시퀀스에는 첫 번째 시퀀스에 오버레이할 동영상 클립이 포함될 수 있으며, 또 다른 시퀀스에는 배경 음악의 오디오 트랙만 포함될 수 있습니다.
  • 중요한 이유: EditedMediaItemSequence는 서로 직접 따라야 하는 관련 미디어 항목을 그룹화합니다. 여러 시퀀스를 사용하면 오디오 레이어링 또는 시각적 오버레이 만들기 등 더 복잡한 배열을 빌드할 수 있습니다.

Composition:

  • 목적: 처리할 미디어의 전체 타임라인을 나타내는 최상위 객체입니다. 모든 미디어 시퀀스와 전체 출력에 적용되는 전역 설정 또는 효과의 컨테이너 역할을 합니다.
  • 사용 방법: Composition은 하나 이상의 EditedMediaItemSequence 객체로 구성됩니다. 또한 컴포지션 전체에 적용되는 효과를 적용하고 HDR 모드와 같은 전역 구성을 Composition에 직접 설정할 수 있습니다. Composition에 여러 EditedMediaItemSequence 객체가 포함된 경우 이러한 시퀀스를 순차적으로 재생하도록 정렬하거나 시간상 겹치도록 정렬하여 PIP 또는 한 시퀀스에서 다른 시퀀스로의 전환과 같은 오버레이된 레이아웃을 허용할 수 있습니다.
  • 중요한 이유: Composition는 처리할 입력 미디어의 전반적인 구조를 정의하며, CompositionPlayer수정사항을 미리 보고 Transformer를 사용하여 수정사항이 적용된 출력 동영상을 내보내는 데 모두 사용할 수 있는 일반적인 객체입니다.

Composition 만들기 및 내보내기

다음은 오디오 트랙으로 오버레이된 수정된 동영상 클립 두 개로 구성된 동영상 애셋을 만들고 내보내는 예입니다.

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)

자바

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

지원되는 사용 사례의 예

다음은 Transformer API가 Composition으로 지원하는 사용 사례의 비포괄적인 목록입니다.

  • 오디오, 이미지, 동영상 애셋을 순차적으로 결합합니다.
  • 동영상 애셋에 배경 오디오를 추가합니다.
  • 컴포지션에 효과를 추가합니다.
  • HDR 입력을 SDR에 톤 매핑하여 더 나은 시각적 품질의 SDR 출력을 생성합니다.

현재 제한사항

컴포지션 내의 시퀀스는 Transformer.start()에 설명된 조건을 충족해야 합니다. 또한 컴포지션으로 작업할 때는 다음 작업이 아직 지원되지 않습니다.

  • 동영상 또는 오디오 트랙 크로스페이드

기능 요청

Transformer API에 관한 기능 요청이 있다면 Media3 GitHub 저장소에 문제를 제출하세요.