サポートされている形式

一般的なメディア形式については、ExoPlayer でサポートされている形式 のページをご覧ください。Transformer では、ExoPlayer のバンドルされているソフトウェア デコーダ モジュールはサポートされていませんが、ストリームの読み込み、抽出、デコードに関する制限は Transformer でも同様に適用されます。

Transformer はエンコードに MediaCodec を使用するため、サポートされる出力形式が制限されます。エンコードの制限について詳しくは、MediaCodec 動画コーデック をご覧ください。

デフォルトでは、Transformer は標準の MP4 ファイルを InAppMp4Muxerを使用して出力します。アプリでフラグメント化された MP4 が必要な場合は、 InAppFragmentedMp4Muxer.FactoryTransformerインスタンスの初期化時に渡すことができます。Media3 は、WebM、AAC、Ogg、WAV などの他の形式もサポートしています。 専用のマルチプレクサを使用します。 WebmMuxerAacMuxerOggMuxerWavMuxer などです。これらを挿入するには、カスタムの Muxer.Factoryでラップする必要がありますが、今後のリリースでは、 このプロセスを簡素化するために、すぐに使用できるファクトリ実装が追加される予定です。

画像のサポート

Transformer は BitmapFactory を使用してすべての画像アセットを読み込んでデコードするため、Transformer は BitmapFactory がサポートするすべての形式をサポートします。サポートされている画像タイプについては、 画像のサポート をご覧ください。マルチピクチャ形式(GIF など)の場合、DefaultAssetLoaderFactory を使用すると、コンテナから 1 つの画像フレームが表示されます。

特殊な形式

Transformer は、従来の形式と比較して特別な機能を提供する新しいメディア形式の入力を処理することをサポートしています。

HDR 動画の処理

HDR 動画 のキャプチャをサポートするデバイスが増えており、より鮮やかで正確な 色と広い輝度範囲を実現しています。

Transformer は、必要なエンコード サポートを備えたデバイスで、Android 13(API レベル 33)以降の HDR 動画の編集をサポートしています。HDR 動画を編集する場合、GL 動画エフェクトは 16 ビット浮動小数点カラー コンポーネントと BT.2020 色空間を処理する必要があります。Composition をビルドする場合、デフォルト モードは HDR_MODE_KEEP_HDR です。HDR 編集がサポートされていない場合、Transformer は HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL を使用します。

HDR から SDR への変換(トーンマッピングとも呼ばれます)は、必要なデコードと OpenGL サポートを備えたデバイスで、Android 10(API レベル 29)以降でサポートされています。これは、HDR コンテンツの取り込みをサポートしていない他のアプリやサービスに HDR メディアを共有する場合に便利です。OpenGL を使用してトーンマッピングを有効にするには、Composition の作成時に setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) を呼び出します。Android 12(API レベル 31)以降では、MediaCodec は、HDR 動画をキャプチャできる Android 13 以降を搭載したすべてのデバイスなど、一部のデバイスでトーンマッピングもサポートしています。MediaCodec を使用してトーンマッピングを有効にするには、setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) を呼び出します。

Transformer は、次のような高度なコード変換シナリオもサポートしています。

  • ウルトラ HDR から HDR 動画: ウルトラ HDR 画像入力を HDR 動画に変換できます。画像のダイナミック レンジと広色域を維持できるため、静止画は混合タイムラインの HDR 動画のピーク輝度と鮮やかさに一致します。
  • Dolby Vision のコード変換とトランスマルチプレクス: Transformer は、再エンコードせずに Dolby Vision(プロファイル 8)メディアから下位互換性のあるベースレイヤ(HEVC など)をトランスマルチプレクスしたり、トーンマッピングを使用して標準の SDR 形式にコード変換したりすることをサポートしています。

スローモーション メディアの処理

スローモーション動画には、ストリームの各セクションを再生する速度を示すメタデータが含まれています。平坦化 とは、スローモーション動画に基づいて新しい動画ストリームを生成するプロセスです。このプロセスでは、メタデータに基づいてセクションの速度が速くなったり遅くなったりするため、スローモーション メタデータを適用しないプレーヤーでも正しく再生できます。

スローモーション ストリームを平坦化するには、EditedMediaItemsetFlattenForSlowMotion ビルダー メソッドを使用します。

Kotlin

val editedMediaItem =
  EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build()
val transformer = Transformer.Builder(context).addListener(transformerListener).build()
transformer.start(editedMediaItem, outputPath)

Java

EditedMediaItem editedMediaItem =
    new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build();
Transformer transformer =
    new Transformer.Builder(context).addListener(transformerListener).build();
transformer.start(editedMediaItem, outputPath);

これにより、特別な形式の処理を気にすることなく、スローモーション動画をサポートできます。元の動画ではなく、平坦化されたバージョンの動画を保存して再生するだけで済みます。