Определите состав медиа-материалов.

Библиотека Media3 Transformer предоставляет набор инструментов для редактирования и обработки медиафайлов. Ключевым компонентом для редактирования нескольких ресурсов является API Composition . Этот API позволяет упорядочивать несколько входных медиафайлов, таких как видеоклипы, изображения и аудиодорожки, в единую, согласованную структуру, которую затем можно обрабатывать, просматривать или экспортировать. Composition можно рассматривать как временную шкалу, содержащую одну или несколько последовательностей медиафайлов. Каждая последовательность (определяемая объектом EditedMediaItemSequence ) содержит отдельные медиафайлы (определяемые как экземпляры EditedMediaItem ). Преобразования и эффекты могут применяться к отдельному EditedMediaItem или ко всей Composition целиком.

Структура объекта композиции
Структура объекта композиции

Composition — это ваша отправная точка для различных вариантов использования Media3 Transformer, таких как:

  • Последовательное объединение аудио-, графических и видеоматериалов.
  • Наложение одного видео поверх другого (картинка в картинке).
  • Сведение фоновой звуковой дорожки с видеорядом.
  • Применение визуальных или звуковых эффектов ко всему смонтированному материалу.
  • Обработка сложных сценариев, таких как обработка HDR-видео.

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

Основные понятия и классы

Для эффективного использования Composition API важно понимать основные классы, участвующие в создании медиакомпозиции:

Effects :

  • Назначение: Объект Effects представляет собой набор аудиопроцессоров и видеоэффектов .
  • Как это используется: В контексте Composition Effects можно применять к отдельным экземплярам EditedMediaItem для изменения конкретных клипов или ко всей Composition в целом (обычно для эффектов Presentation , влияющих на конечный результат, таких как регулировка разрешения экрана или частоты кадров).
  • Почему это важно: Effects — это механизм для применения преобразований, фильтров и других методов обработки к вашим медиафайлам как на уровне отдельных элементов, так и на уровне всей композиции. Для получения дополнительной информации см. Transformations .

EditedMediaItem :

  • Назначение: Этот класс представляет собой отдельный медиафайл (например, видео, изображение или аудиофайл) и параметры редактирования, которые необходимо к нему применить.
  • Как это используется: Объект EditedMediaItem объединяет MediaItem (который указывает на фактическое содержимое медиафайла) с объектом Effects .
  • Почему это важно: Это фундаментальный строительный блок вашей композиции. Он позволяет точно определить, какие медиаматериалы следует включить и как каждый отдельный элемент должен выглядеть и звучать, прежде чем он будет объединен с другими в последовательности.

EditedMediaItemSequence :

  • Назначение: Представляет собой линейную последовательность объектов EditedMediaItem , предназначенных для воспроизведения один за другим.
  • Как это используется: Объект EditedMediaItemSequence создается из списка объектов EditedMediaItem . Каждая последовательность в Composition аналогична дорожке или слою на временной шкале многодорожечного видеомонтажа. Например, одна последовательность может содержать основные видеоклипы, другая, перекрывающаяся во времени, может содержать видеоклипы, которые накладываются на первую, а третья последовательность может содержать только аудиодорожку для фоновой музыки.
  • Почему это важно: EditedMediaItemSequence группирует связанные медиафайлы, которые должны следовать друг за другом напрямую. Используя несколько последовательностей, вы можете создавать более сложные композиции, например, накладывать звук или создавать визуальные наложения.

Composition :

  • Назначение: Это объект верхнего уровня, представляющий всю временную шкалу обрабатываемых медиафайлов. Он служит контейнером для всех последовательностей медиафайлов, а также любых глобальных настроек или эффектов, применяемых ко всему выходному результату.
  • Как это используется: Composition состоит из одного или нескольких объектов EditedMediaItemSequence . Вы также можете применять эффекты ко всей композиции и устанавливать глобальные параметры, такие как режим HDR, непосредственно в Composition . Если Composition содержит несколько объектов EditedMediaItemSequence , эти последовательности могут воспроизводиться последовательно или перекрываться во времени, что позволяет создавать наложенные друг на друга макеты, такие как «картинка в картинке», или переходы от одной последовательности к другой.
  • Почему это важно: Composition определяет общую структуру обрабатываемого входного медиафайла и является распространенным объектом, который можно использовать как для предварительного просмотра изменений с помощью CompositionPlayer , так и для экспорта выходного видео с внесенными изменениями с помощью Transformer .

Создать и экспортировать Composition

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

Котлин

val video1 = EditedMediaItem.Builder(MediaItem.fromUri(video1Uri)).build()

val video2 = EditedMediaItem.Builder(MediaItem.fromUri(video2Uri)).build()

val videoSequence = EditedMediaItemSequence.withAudioAndVideoFrom(listOf(video1, video2))

val backgroundAudio = EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build()

val backgroundAudioSequence =
  EditedMediaItemSequence.withAudioFrom(listOf(backgroundAudio))
    .buildUpon()
    .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 =
    EditedMediaItemSequence.withAudioAndVideoFrom(ImmutableList.of(video1, video2));

EditedMediaItem backgroundAudio =
    new EditedMediaItem.Builder(MediaItem.fromUri(audioUri)).build();

EditedMediaItemSequence backgroundAudioSequence =
    EditedMediaItemSequence.withAudioFrom(ImmutableList.of(backgroundAudio))
        .buildUpon()
        .setIsLooping(true) // Loop audio track through duration of videoSequence
        .build();

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

transformer.start(composition, filePath);

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

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

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

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

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

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

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

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