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.