Edição de vários recursos

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.