Con Transformer, puedes combinar varios recursos de medios, como videos, imágenes y archivos de audio, para crear un Composition.
Cómo exportar una composición
Para aplicar transformaciones (como efectos o ediciones de recorte) a un MediaItem, debes crear un EditedMediaItem para representar el recurso al que se le aplicaron las transformaciones.
Luego, los objetos EditedMediaItem se pueden concatenar para crear un objeto EditedMediaItemSequence.
Por ejemplo, puedes crear un EditedMediaItemSequence con dos videos editados. Los elementos dentro de un EditedMediaItemSequence se ordenan de forma secuencial y no se superponen en el tiempo.
Un Composition es la combinación de uno o más objetos EditedMediaItemSequence. Todos los objetos EditedMediaItemSequence del Composition se mezclan, lo que te permite combinar recursos de audio y video.
Los objetos Composition se pueden exportar con Transformer.
A continuación, se muestra un ejemplo de cómo crear y exportar un activo de video que consta de dos clips de video editados, superpuestos con una pista de 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);
Ejemplos de casos de uso admitidos
Esta es una lista no exhaustiva de los casos de uso que admite la API de Transformer con composiciones:
- Combinar secuencialmente recursos de audio, imagen y video
- Agrega audio de fondo a un recurso de video.
- Agrega efectos a una composición.
- Asigna el tono de la entrada HDR a SDR para generar una salida SDR con mejor calidad visual.
Limitaciones actuales
Las secuencias dentro de una composición deben cumplir con las condiciones que se describen en Transformer.start().
Además, las siguientes operaciones aún no son compatibles cuando se trabaja con Composiciones:
- Cómo hacer fundidos cruzados de pistas de audio o video
Solicitudes de funciones
Si tienes solicitudes de funciones para la API de Transformer, informa un problema en el repositorio de GitHub de Media3.