Modification de plusieurs éléments

Transformer vous permet de combiner plusieurs assets multimédias, tels que des vidéos, des images et des fichiers audio, pour créer un Composition.

Exporter une composition

Pour appliquer des transformations (telles que des effets ou des modifications de découpage) à un MediaItem, vous devez créer un EditedMediaItem pour représenter l'élément auquel les transformations sont appliquées.

Les objets EditedMediaItem peuvent ensuite être concaténés pour créer un EditedMediaItemSequence. Par exemple, vous pouvez créer un EditedMediaItemSequence avec deux vidéos modifiées. Les éléments d'un EditedMediaItemSequence sont ordonnés de manière séquentielle et ne se chevauchent pas dans le temps.

Un Composition est une combinaison d'un ou plusieurs objets EditedMediaItemSequence. Tous les objets EditedMediaItemSequence du Composition sont mixés ensemble, ce qui vous permet de combiner des composants vidéo et audio.

Les objets Composition peuvent être exportés à l'aide de Transformer.

Voici un exemple de création et d'exportation d'un élément vidéo composé de deux extraits vidéo modifiés, superposés à une piste audio :

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

Exemples de cas d'utilisation acceptés

Voici une liste non exhaustive de cas d'utilisation que l'API Transformer prend en charge avec les compositions :

  • Combinaison séquentielle de composants audio, d'image et vidéo.
  • Ajouter un son de fond à un élément vidéo
  • Ajouter des effets à une composition
  • Mappage de ton de l'entrée HDR vers SDR pour générer une sortie SDR de meilleure qualité visuelle.

Limites actuelles

Les séquences d'une composition doivent respecter les conditions décrites dans Transformer.start(). De plus, les opérations suivantes ne sont pas encore prises en charge lorsque vous travaillez avec des compositions :

  • Fondu enchaîné des pistes vidéo ou audio

Demandes de fonctionnalités

Si vous avez des demandes de fonctionnalités pour l'API Transformer, créez un problème dans le dépôt GitHub Media3.