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

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

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

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

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

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

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

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

Котлин

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(
  video1, video2)

val backgroundAudio = EditedMediaItem.Builder(
  MediaItem.fromUri(audioUri))
  .build()

val backgroundAudioSequence = EditedMediaItemSequence(
  ImmutableList.of(backgroundAudio),
  /* isLooping= */ true) // Loop audio track through duration of videoSequence

val composition = Composition.Builder(
  videoSequence,
  backgroundAudioSequence)
  .build()

val filePath = ... // Provide file path to save Composition

transformer.start(composition, filePath)

Ява

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(
  video1, video2);

EditedMediaItem backgroundAudio = new EditedMediaItem.Builder(
  MediaItem.fromUri(audioUri))
  .build();

EditedMediaItemSequence backgroundAudioSequence = new EditedMediaItemSequence(
  ImmutableList.of(backgroundAudio),
  /* isLooping= */ true); // Loop audio track through duration of videoSequence

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() . Кроме того, при работе с композициями пока не поддерживаются следующие операции:

  • Запуск воспроизведения EditedMediaItemSequence со смещением.
  • Кроссфейдинг видео или аудио дорожек

Запросы функций

Если у вас есть какие-либо пожелания по функциям API Transformer, сообщите о проблеме в репозитории Media3 GitHub .