Modifica di più asset

Utilizzando Transformer, puoi combinare più asset multimediali, come video, immagini e file audio, per creare un Composition.

Esportare una composizione

Per applicare le trasformazioni (come effetti o modifiche di taglio) a un MediaItem, devi creare un EditedMediaItem per rappresentare l'asset a cui sono state applicate le trasformazioni.

Gli oggetti EditedMediaItem possono poi essere concatenati per creare un EditedMediaItemSequence. Ad esempio, puoi creare un EditedMediaItemSequence con due video modificati. Gli elementi all'interno di un EditedMediaItemSequence sono ordinati in sequenza e non si sovrappongono nel tempo.

Un Composition è la combinazione di uno o più oggetti EditedMediaItemSequence. Tutti gli oggetti EditedMediaItemSequence in Composition vengono combinati insieme, consentendoti di combinare asset video e audio.

Gli oggetti Composition possono essere esportati utilizzando Transformer.

Ecco un esempio di creazione ed esportazione di un asset video composto da due clip video modificati, sovrapposti a una traccia 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);

Esempi di casi d'uso supportati

Questo è un elenco non esaustivo di casi d'uso che l'API Transformer supporta con le composizioni:

  • Combinazione sequenziale di asset audio, immagine e video.
  • Aggiunta di audio di sottofondo a una risorsa video.
  • Aggiunta di effetti a una composizione.
  • Mappatura della tonalità dell'input HDR in SDR per generare un output SDR con una migliore qualità visiva.

Limitazioni attuali

Le sequenze all'interno di una composizione devono soddisfare le condizioni descritte in Transformer.start(). Inoltre, le seguenti operazioni non sono ancora supportate quando si lavora con le composizioni:

  • Dissolvenza incrociata di tracce video o audio

Richieste di funzionalità

Se hai richieste di funzionalità per l'API Transformer, segnala un problema nel repository GitHub di Media3.