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

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

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

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

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

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

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

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

Котлин

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

transformer.start(composition, filePath)

Java

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

Composition composition =
    new Composition.Builder(videoSequence, backgroundAudioSequence).build();

transformer.start(composition, filePath);

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

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

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

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

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

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

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

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