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