С помощью 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 .