Редактирование нескольких ресурсов

С помощью Transformer вы можете объединять различные медиафайлы, такие как видео, изображения и аудиофайлы, для создания Composition .

Экспорт композиции

Чтобы применить преобразования (например, эффекты или обрезку) к MediaItem , следует создать объект EditedMediaItem , представляющий ресурс, к которому применены преобразования.

Затем объекты EditedMediaItem можно объединять для создания объекта EditedMediaItemSequence . Например, можно создать объект EditedMediaItemSequence из двух отредактированных видео. Элементы внутри объекта EditedMediaItemSequence упорядочены последовательно и не перекрываются во времени.

Composition представляет собой комбинацию одного или нескольких объектов EditedMediaItemSequence . Все объекты EditedMediaItemSequence в Composition смешиваются вместе, что позволяет объединять видео- и аудиофайлы.

С помощью Transformer можно экспортировать Composition объекты.

Вот пример создания и экспорта видеофайла, состоящего из двух отредактированных видеоклипов с наложенной на них звуковой дорожкой:

Котлин

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);

Примеры поддерживаемых вариантов использования

Это неполный список вариантов использования, которые API Transformer поддерживает с помощью композиций:

  • Последовательное объединение аудио-, графических и видеоматериалов.
  • Добавление фонового звука к видеофайлу.
  • Добавление эффектов к композиции.
  • Преобразование входного сигнала HDR в SDR с помощью тонального отображения для получения выходного сигнала SDR с лучшим визуальным качеством.

Текущие ограничения

Последовательности внутри композиции должны соответствовать условиям, изложенным в Transformer.start() . Кроме того, следующие операции пока не поддерживаются при работе с композициями:

  • Плавный переход между видео- и аудиодорожками

Запросы на добавление функций

Если у вас есть пожелания по улучшению API Transformer, создайте заявку в репозитории Media3 на GitHub .