マルチアセット編集

Transformer を使用すると、動画、画像、音声ファイルなどの複数のメディア アセットを組み合わせて Composition を作成できます。

コンポジションのエクスポート

MediaItem変換(エフェクトやトリミング編集など)を適用するには、変換が適用されたアセットを表す EditedMediaItem を作成する必要があります。

EditedMediaItem オブジェクトを連結して EditedMediaItemSequence を作成できます。たとえば、編集した 2 つの動画を含む EditedMediaItemSequence を作成できます。EditedMediaItemSequence 内のアイテムは順次並べられ、時間的に重複することはありません。

Composition は、1 つ以上の EditedMediaItemSequence オブジェクトの組み合わせです。Composition 内のすべての EditedMediaItemSequence オブジェクトが混合され、動画アセットと音声アセットを組み合わせることができます。

Composition オブジェクトは Transformer を使用してエクスポートできます。

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

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

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

以下は、Transformer API がコンポジションでサポートするユースケースの一部です。

  • 音声、画像、動画のアセットを順番に組み合わせます。
  • 動画アセットにバックグラウンド オーディオを追加する。
  • コンポジションにエフェクトを追加する。
  • HDR 入力を SDR にトーン マッピングして、より高品質な SDR 出力を生成します。

現時点における制約

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

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

機能リクエスト

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