Статьи‎ > ‎

Введение в DirectShow Editing Services (DES) [Черновик]

DES - это API, которое очень сильно упрощает задачи, связанные с редактированием видео. DES сделан на верхем уровне архитектуры DirectShow. DES сложнее DirectShow и предоставляет интерфейсы, разработанные специально для манипулирования проектами, связанными с видеоредактированием. Как разработчики приложений, вы получите выгоды DirectShow в библиотеке, специально предназначенной для создания приложений видеоредактирования.

Ядром DirectShow есть мощная архитектура для управления потоковым медиа. Приложение может использовать его для проигрывания мультимедиа-содержания широкого спектра форматов без разработки разнообразных компрессоров и т.п. других утомительных деталей. Без DES, однако, DirectShow испытывает недостаток в гибкости, необходимой для нелинейного редактирования.

Например, предположим, что мы хотим создать видеопоследовательность, состоящую из 4 секунд из источника A, далее - 10 секунд из источника B, и заканчивается это 5 секундами из источника C. Это можно легко сделать, используя только и ядро DirectShow API.

Но что, если вы вдруг решили, что исчтоник C должен идти перед источником B, а не после; что последовательность должна использовать 8 секунд источника A, а не 4; и что все это должно сопровождаться аудиотрэком? Любое маленькое изменение, такое, как эти, потребует другой реализации. Но сценарий, описанный здесь - очень прост с использованием DES - вы можете сделать это путем нескольких вызовов.

Вот некоторые особенности, которые DES добавляет к DirectShow:

  • Модель графика времени, который организовывает аудио и видео треки во вложенные слои, делает легкими манипуляции над результатом.
  • Возможность предварительного просмотра видеопроекта "на лету".
  • Сохранение проекта, базирующееся на XML-формате.
  • Поддержка видео и аудио эффектов, так же как и переходов между треками (таких, как исчезновение и стирания).
  • Более 100 стандартных исчезновений, определенных Society of Motion Picture and Television Engineers (SMPTE).
  • Ключах, основанных на оттенке, светимости, величине RGB или альфа.
  • Автоматическое преобразование скорости аудио и видео, позволяющее использовать неоднородные источники.
  • Изменение размеров или подрезание видео.

Самый быстрый способ увидеть DES в действии - запустить тестовое приложение XTLTestSample. Эта утилита разбирает проектные файлы DES (XML-формата) и отображает их на экране. Вы можете поэкспериментировать с XtlTest, редактируя вручную примеры фалов проекта и рендеря их затем.

Архитектура DES

Следующая иллюстрация показывает архитектуру DES:

  • Timeline (график времени): Представляет видеопродукцию как набор исходных клипов, трансляций и эффектов, организованных в набор вложенных треков.
  • XML Parser: Анализирует график времени и генерирует файл, или читает входящий файл и генерирует график времени. DES поддерживает формат хранения, основанный на XML.
  • Render Engine: Переводит график времени в форму, которая может быть воспроизведена как потоковое медиа. По умолчанию ядро рендеринга продуцирует граф фильтров DirectShow.
  • Media locator: Содержит кэш с элементами медиа. Когда попытка открытия медиаэлемента заканчивается неудачно, DES использует кэш для нахождения элемента, основываясь на истории успешных открытий.

График времени - это абстрактное описание проекта видеоредактирования. В нем задаются исходные клипы, используемые в проекте, времена старта и остановки, эффекты и трансляции, и т.д. Timeline, однако, не рендерит аудио и видео потоки. Вместо этого, ядро рендеринга транслирует timeline в граф фильтров для педпросмотра или вывода в файл. Приложению предпочтительнее иметь дело с timeline, нежели напрямую с графом фильтров, который достаточно сложен и тяготеет к ошибкам.

В следующих таблицах описаны главные задачи, которые, обычно, решают приложения видеоредактирования, и интерфейсы, которые используются для их решения. Далее эти задачи и интерфейсы будут разобраны более подробно:

ЗадачаИнтерфейс(ы)
Создание или изменение timelineIAMTimeline и другие интерфейсы IAMTimelineXXX
Сохранение и загрузка файлов проектаIXml2Dex
Предпросмотр проекта или запись его в файлIRenderEngine, ISmartRenderEngine

Вдобавок, приложения могут предназначаться и для выполнения следующих дополнительных задач:

ЗадачаИнтерфейс(ы)
Получение информации о медиафайле (количество потоков, формат и продолжительность каждого потока).IMediaDet
Установка свойств на трансляциях и эффектах.IPropertySetter
Получение уведомлений о происходящих ошибках при рендеринге.IAMSetErrorLog, IAMErrorLog
Извлечение фреймовIMediaDet, ISampleGrabber

Timeline-модель

Timeline - это объект, который DES использует для представления проекта видеоредактирования. Проект редактирования начинается с коллекции клипов-источников - видеофайлов, аудиофайлов или файлов отдельных изображений. Линейная последовательность клипов образует трек (track). В DES аудио и видео размещаются в раздельных треках.

Треки могут быть уровневыми (layers - или слоевыми?). Множество аудиотреков смешивается воедино, и могут включать аудиоэффекты, такие как исчезновение звука и искусственное эхо. Множество видеоклипов используются для создания сдвигов. Например, вы можете создать переход от одного клипа к другому. Другой пример - хроматический ключ, в котором фон одного трека заменяется другим треком (ЧТО-ТО С ПЕРЕВОДОМ). (The weather forecaster in front of a satelite image is an example of chroma keying.)

DES использует древовидную структуру для представления редактирования:

  • Аудио и видеоклипы с листовых узлов, или объекты источников.
  • Коллекции источников с унифицированными медиатипами (аудио и видео) - треки.
  • Коллекции треков - композиции (composition). Композиции отображаются как содержимое всех треков, которые в ней содержатся. Композиции могут содержать другие композиции, что позволяет сложно упорядочивать треки.
  • Коллекция верхнего уровня композиций и треков (все представления некоторого медиатипа) есть группой.
  • Множество одной или более групп формируют timeline. Timeline - это не корневой узел в дереве.

Timeline должен содержать, как минимум, одну группу. Каждая группа представляет один поток в финальном произведении. Обычный проект включает одну аудио- и одну видео- группу. Композиции - опциональны; они существуют для предоставления, в случае необходимости, большей производительности.

Следующая иллюстрация показывает отношения предки-наследники в timeline:

Следующая иллюстрация показывает timeline как временнУю последовательность:

Стрелка вверху показывает направление timeline, начиная с нуля. Внутри видеогруппы Track1 имеет более высокий приоритет, чем Track0. Объекты источника в треке 1 тусклее, чем в треке 0. Где трек 1 пуст, там трек 0 проглядывает через него. Как указывалось раньше, аудиотреки просто смешиваются вместе.

Переходы

Перемещения - путь продления одного трека в другой, используя визуальные эффекты, такие, как исчезновение и затирание. Следующая иллюстрация показывает timeline с перемещением:

Перемещаемым объектом – на треке 1, и представляет перемещение от трека 0 к треку 1. В начале перемещения видеорендерер начинает с трека 0 (источник A). В конце видео полностью берется из трека 1 (источник C). Между ними выход есть переходом от источника A к C. Например, в переходе постепенного исчезновения (fade), один источник постепенно заменяется другим. Выход схематически показан внизу картинки.

Переходы не могут перекрываться во времени внутри некоторого трека, но вы можете создать перекрытия переходов, используя объект композиции.

Переход имеет направление. По умолчанию, он начинается с трека с более низким приоритетом (источник A для предыдущего примера) и заканчивается на треке с более высоким приоритетом (источник C). Внутри же видео есть смешением обоих источников. Впрочем, можно задать и другое поведение, ка показано на следующем рисунке:

Тут первый переход исчезания идет от трека 0 к треку 1, как задано по умолчанию. Второй переход пропадания идет от трека 1 к треку 0. Заметьте, что оба перехода расположены по ходу трека 1.

Композиции и слои

В коллекции треков первый трек имеет самый низкий приоритет (приоритет 0) и каждый последующий трек имеет приоритет на один уровень выше. На каждом уровне приоритета клипы-источники At each priority level, the source clips in that track hide the source clips in the tracks below it, unless that layer also contains a transition. Thus you can imagine DES making several passes when it renders.

Сначала воспроизводится трек 0. Нет ничего "над" треком 0, так что пустые области воспроизводятся как картинки, полностью залитые черным. Переходы на этом уровне происходят между черной картинкой и треком 0 или наоборот. DES кладет трек 1 сверху трека 0, производя все переходы между двумя треками. Результатом есть композиция двух треков. Далее, он выкладывает трек 2 на эту композицию. Переход на этом уровне происходит между композицией и треком 2. Процесс будет продолжаться до тех пор, пока последний (самый высокоприоритетный) трек не будет выложен.

Когда несколько треков соединяются вместе, они ведут себя как один трек (виртуальный трек). Композитный объект скрывает это поведение, делая возможными сложные переходы. Например, один видеоклип может вытирать второй клип до тех пор, пока их композиция (оба клипа могут вытирать) не приведут к исчезновению третьего.

Время в DES

Для редактирования видео вы должны работать с некоторыми важными концепциями времени. Например:

  • Каждый клип имеет длительность.
  • Клипы, переходы и эффекты появляются в проекте в определенное время.
  • Видео имеет определенную скорость (кадров в секунду).

DES предоставляет различные методы, устанавливающие и возвращающие времена и скорости. Их значения зависит от контекста.

Значения времени

Когда параметр выражает время, возможны три раные возможности:

  • Timeline - время: Это время, относящееся к началу timeline. Например, клип может стартовать со второй секунды timeline, или переход может происходить с 15-ой секунды timeline. Timeline определяет окончательное воспроизведение проекта, так что можно думать о timeline, как о времени проекта.
  • Медиа - время: Точка в файле источника, относящаяся к началу файла, которая могла бы быть полученна при обычном проигрывании. Например, если у вас есть 10-секундный видеофайл, точка, находящаяся посреди него, будет иметь 5 секунд - это и будет соответствующее медиавремя.
  • Время предка: Время, соответствующее объекту в timeline. Например, если объект стартует на 8 секунде на timeline и содержит другой объект, который стартует на 10 секунде на timeline, то дочерний объект стартует на 2-ой секунде относительно своего предка. Все виртуальные треки стартуют со времени 0 относительно timeline. Так, для любого объекта в виртуальном треке, время предка эквивалентно времени timeline.

Медиавремя применяется только к объектам источников. Каждый объект источника имеет время медиастарта и время медиастопа. Например, предположим, что мы имеем 10-секундный видеоклип, и мы хотим использовать только 5 секунд из середины клипа, обрезая первые две секунды и последние 3 секунды от клипа. Если вы хотите показать это на 20-й секунде проекта (при обычной скорости), вы должны указать следующие времена старта и стопа:

  • Медиастарт: 2 сек
  • Медиастоп: 7 сек
  • Timeline - старт: 20 сек
  • Timeline - стоп: 25 сек

Frame rate (скорость в кадрах в секунду)

Frame rate - это "скорость" медиапотока, измеряемая в кадрах в секунду.

Comments