メディア アイテムのコンポジションを定義する

Media3 Transformer ライブラリには、メディアの編集と操作を行うためのツールが用意されています。マルチアセット編集の中核となるコンポーネントは Composition API です。この API を使用すると、動画クリップ、画像、音声トラックなどの複数の入力メディア アイテムを 1 つのまとまりのある構造に配置して、処理、プレビュー、エクスポートを行うことができます。Composition は、1 つ以上のメディア シーケンスを保持するタイムラインと考えることができます。各 シーケンス(EditedMediaItemSequence で定義)には、個々の メディア アイテム(EditedMediaItem インスタンスとして定義)が含まれています。 変換と効果は、個々の EditedMediaItemに適用することも、Composition全体に適用することもできます。

Composition オブジェクトの構造
Composition オブジェクトの構造

Composition は、Media3 Transformer のさまざまなユースケースのエントリ ポイントです。たとえば、次のようなユースケースがあります。

  • 音声、画像、動画アセットを順番に結合する。
  • 動画を別の動画の上に重ねる(ピクチャー イン ピクチャー)。
  • 背景音声トラックを動画シーケンスとミックスする。
  • 編集した動画全体に視覚効果や音声効果を適用する。
  • HDR 動画処理などの複雑なシナリオを処理する。

このガイドでは、Composition オブジェクトの定義と作成に焦点を当てます。これには、関連する主要なクラス、単一または複数のシーケンスで基本的な構成と複雑な構成を作成する方法、さまざまなレベルで効果を適用する方法が含まれます。

主なコンセプトとクラス

Composition API を効果的に使用するには、メディア構成の構築に関わる主なクラスを理解しておくことが重要です。

Effects:

  • 目的: Effects オブジェクトは、音声プロセッサ動画効果のコレクションです。
  • 使用方法: Composition のコンテキストでは、個々の EditedMediaItem インスタンスに Effects を設定して特定のクリップを変更したり、Composition 全体に設定したりできます(通常は、表示解像度やフレームレートの調整など、最終出力に影響する Presentation 効果の場合)。
  • 重要な理由: Effects は、個々のアイテム レベルと構成全体のレベルの両方で、メディアに 変換、フィルタ、その他の処理を適用するメカニズムです。詳細については、 Transformationsをご覧ください。

EditedMediaItem:

  • 目的: このクラスは、単一のメディア(動画、画像、音声ファイルなど)と、それに適用する編集を表します。
  • 使用方法: EditedMediaItem は、 MediaItem(実際のメディア コンテンツを指す)を Effects オブジェクトとグループ化します。
  • 重要な理由: これは 構成の基本的な構成要素です。どのメディアを含めるか、シーケンス内の他のメディアと組み合わせる前に、各メディアをどのように表示して再生するかを正確に定義できます。

EditedMediaItemSequence:

  • 目的: 連続して再生することを目的とした EditedMediaItem オブジェクトの線形シーケンスを表します。
  • 使用方法: EditedMediaItemSequence は、 EditedMediaItem オブジェクトのリストで構築されます。Composition 内の各シーケンスは、マルチトラック動画編集タイムラインのトラックまたはレイヤに似ています。たとえば、1 つのシーケンスにメインの動画クリップが含まれ、別のシーケンスに最初の動画クリップに重ねる動画クリップが含まれ、別のシーケンスに背景音楽の音声トラックのみが含まれる場合があります。
  • 重要な理由: EditedMediaItemSequence は、直接連続して再生する必要がある関連するメディア アイテムをグループ化します。複数のシーケンスを使用すると、音声のレイヤリングや視覚的なオーバーレイの作成など、より複雑な配置を作成できます。

Composition:

  • 目的: 処理するメディアのタイムライン全体を表す最上位のオブジェクトです。すべてのメディア シーケンスと、出力全体に適用されるグローバル設定または効果のコンテナとして機能します。
  • 使用方法: Composition は、1 つ以上の EditedMediaItemSequence オブジェクトで構成されます。また、構成全体に適用される効果を適用したり、HDR モードなどのグローバル構成を Composition に直接設定したりすることもできます。 Composition に複数の EditedMediaItemSequence オブジェクトが含まれている場合、これらのシーケンスを順番に再生するように配置することも、時間的に重複させることもできます。これにより、ピクチャー イン ピクチャーなどのオーバーレイ レイアウトや、あるシーケンスから別のシーケンスへのトランジションが可能になります。
  • 重要な理由: Composition は、処理する 入力メディアの全体的な構造を定義します。これは、 編集をプレビューする場合と、CompositionPlayer を使用して編集を適用した出力動画を エクスポートする場合の両方で使用できる共通のオブジェクトです。Transformer

Composition を作成してエクスポートする

編集した 2 つの動画クリップで構成され、音声トラックが重ねられた動画アセットを作成してエクスポートする例を次に示します。

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

サポートされているユースケースの例

Transformer API が Composition でサポートするユースケースの例を次に示します。

  • 音声、画像、動画アセットを順番に結合する。
  • 動画アセットに背景音声を追加する。
  • 構成に効果を追加する。
  • HDR 入力を SDR にトーン マッピングして、画質の高い SDR 出力を生成する。

現在の制限

Composition 内のシーケンスは、 Transformer.start() で概説されている条件を満たしている必要があります。 また、Composition を使用する場合、次のオペレーションはまだサポートされていません。

  • 動画トラックまたは音声トラックのクロスフェード

機能リクエスト

Transformer API に関する機能リクエストがある場合は、 Media3 GitHub リポジトリで問題を報告してください。