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