Media3 Transformer 라이브러리는 미디어를 수정하고 조작하기 위한 도구 모음을 제공합니다. 다중 애셋 수정의 핵심 구성요소는
Composition API입니다. 이 API를 사용하면 동영상 클립, 이미지, 오디오 트랙과 같은 여러 입력 미디어 항목을 처리, 미리보기 또는 내보낼 수 있는 일관된 단일 구조로 정렬할 수 있습니다. Composition은 하나 이상의 미디어 시퀀스를 보유하는 타임라인으로 생각할 수 있습니다. 각
시퀀스 (EditedMediaItemSequence로 정의됨)에는 개별
미디어 항목 (EditedMediaItem 인스턴스로 정의됨)이 포함됩니다.
변환 및 효과는 개별
EditedMediaItem 또는 전체 Composition에 적용할 수 있습니다.
Composition은 다음과 같은 Media3 Transformer의 다양한 사용 사례를 위한 진입점입니다.
- 오디오, 이미지, 동영상 애셋을 순차적으로 결합합니다.
- 다른 동영상 위에 동영상을 오버레이합니다 (PIP).
- 배경 오디오 트랙을 동영상 시퀀스와 믹싱합니다.
- 수정된 전체 콘텐츠에 시각적 또는 오디오 효과를 적용합니다.
- HDR 동영상 처리와 같은 복잡한 시나리오를 처리합니다.
이 가이드에서는 관련된 주요 클래스, 단일 또는 다중 시퀀스로 기본 및 더 복잡한 컴포지션을 만드는 방법, 다양한 수준에서 효과를 적용하는 방법을 비롯하여 Composition 객체를 정의하고 빌드하는 방법을 중점적으로 설명합니다.
주요 개념 및 클래스
Composition API를 효과적으로 사용하려면 미디어 컴포지션 구성과 관련된 주요 클래스를 이해하는 것이 중요합니다.
Effects:
- 목적:
Effects객체는 오디오 프로세서 와 동영상 효과의 모음입니다. - 사용 방법:
Composition의 컨텍스트에서 개별EditedMediaItem인스턴스에Effects를 설정하여 특정 클립을 수정하거나 전체Composition에 설정할 수 있습니다 (일반적으로 디스플레이 해상도 또는 프레임 속도 조정과 같이 최종 출력에 영향을 미치는Presentation효과에 사용됨). - 중요한 이유:
Effects는 개별 항목 수준과 전체 컴포지션 수준 모두에서 변환, 필터, 기타 처리를 미디어에 적용하는 메커니즘입니다. 자세한 내용은Transformations를 참고하세요.
EditedMediaItem:
- 목적: 이 클래스는 단일 미디어 (예: 동영상, 이미지 또는 오디오 파일)와 적용할 수정사항을 나타냅니다.
- 사용 방법:
EditedMediaItem은 실제 미디어 콘텐츠를 가리키는MediaItem을Effects객체와 그룹화합니다. - 중요한 이유: 이는 컴포지션의 기본 빌딩 블록입니다. 이를 통해 포함할 미디어를 정확하게 정의하고 각 개별 콘텐츠가 시퀀스의 다른 콘텐츠와 결합되기 전에 어떻게 보이고 들려야 하는지 정의할 수 있습니다.
EditedMediaItemSequence:
- 목적: 순차적으로 재생할
EditedMediaItem객체의 선형 시퀀스를 나타냅니다. - 사용 방법:
EditedMediaItemSequence는EditedMediaItem객체 목록으로 구성됩니다.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 저장소에 문제를 제출하세요.