Используя 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 .