Com o Transformer, é possível combinar vários recursos de mídia, como vídeos, imagens e arquivos de áudio, para criar um Composition.
Como exportar uma composição
Para aplicar transformações (como efeitos ou edições de corte) a um MediaItem, crie um EditedMediaItem para representar o recurso que recebeu as transformações.
Os objetos EditedMediaItem podem ser concatenados para criar um
EditedMediaItemSequence.
Por exemplo, é possível criar um EditedMediaItemSequence com dois vídeos editados. Os itens dentro de um EditedMediaItemSequence são ordenados sequencialmente e não se sobrepõem no tempo.
Um Composition é a combinação de um ou mais objetos EditedMediaItemSequence. Todos os objetos EditedMediaItemSequence no Composition são combinados, permitindo que você misture recursos de vídeo e áudio.
Os objetos Composition podem ser exportados usando o Transformer.
Confira um exemplo de como criar e exportar um recurso de vídeo que consiste em dois clipes de vídeo editados, sobrepostos a uma faixa de áudio:
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);
Exemplos de casos de uso compatíveis
Esta é uma lista não exaustiva de casos de uso que a API Transformer aceita com composições:
- Combinar sequencialmente recursos de áudio, imagem e vídeo.
- Adicionar áudio de fundo a um recurso de vídeo.
- Adicionar efeitos a uma composição.
- Mapeamento de tons da entrada HDR para SDR para gerar uma saída SDR com melhor qualidade visual.
Limitações atuais
As sequências em uma composição precisam atender às condições descritas em
Transformer.start().
Além disso, as seguintes operações ainda não são compatíveis ao trabalhar com
composições:
- Fundir faixas de áudio ou vídeo
Solicitações de recurso
Se você tiver solicitações de recursos para a API Transformer, registre um problema no repositório do Media3 no GitHub.