Поделиться через


Создание образцов видеоизображений

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей. Он был заменен Читателем источника и Записью приемника. средства для чтения из источника и для записи в приемник оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код средства чтения исходного кода и записи приемников вместо пакета SDK для Windows Media 11, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Видеопоток — это видео, содержащее серию неподвижных изображений. Изображения могут перемещаться в кадре, и каждое изображение может плавно переходить в следующее. Потоки видеоматериалов кодируются с помощью кодека образа Windows Media Video 9 версии 2. Выходное видео похоже на то, что создано кодеком Windows Media Video 9.

Чтобы создать профиль, содержащий поток изображения видео, начните с перечисления видеокодеков, как описано в разделе Получение сведений о конфигурации потока из codecs. Найдите кодек, поддерживающий подтип WMMEDIASUBTYPE_WVP2.

После настройки профиля в объекте записи вызовите IWMWriter::GetInputProps, чтобы получить свойства мультимедиа для потока ввода видео изображения. Получите тип носителя из объекта свойств мультимедиа, вызвав IWMMediaProps::GetMediaType, и измените подтип на WMMEDIASUBTYPE_VIDEOIMAGE. Вы должны задать ширину и высоту видео в максимальные размеры, необходимые для охвата изображений, которые будут добавлены в поток. Затем вызовите IWMMediaProps::SetMediaType с измененным типом ввода. Теперь вы готовы приступить к отправке примеров в объект записи.

Каждый образец должен начинаться со структуры WMT_VIDEOIMAGE_SAMPLE2. Кроме того, примеры могут содержать растровые изображения. Изображение присоединяется только к образцу на первом кадре, в котором оно появляется. Все дополнительные кадры, использующие это изображение, нуждаются только в информации в структуре. Входные растровые изображения должны быть отформатированы как RGB, 24 бита на пиксель.

Растровые файлы хранят данные изображения таким образом, чтобы данные для каждой строки изображения занимали число байт, кратное четырем. (Это называется шагом растрового изображения.) Это устанавливает начало каждой строки видео на границу DWORD, что делает копирование более эффективным. Если строки изображения не делятся равномерно на четыре, строка заполняется до следующего большего кратного четырем байтам. При присоединении данных изображения необходимо удалить любое заполнение, находящееся в конце данных для каждой строки.

Кодек образа Windows Media Video 9 версии 2 поддерживает до двух образов в памяти одновременно. Эти изображения называются предыдущим изображением и текущим изображением. Каждое изображение содержит набор элементов в структуре WMT_VIDEOIMAGE_SAMPLE2, которые определяют, как изображение представлено в кадре. Вы можете добавить изображение, установив значение элемента dwControlFlags из WMT_VIDEOIMAGE_SAMPLE2 в WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. При передаче входного кадра в кодек это изображение становится текущим изображением. Изображение, которое было текущим изображением в предыдущем примере, обычно становится предыдущим, и изображение, которое было предыдущим изображением в предыдущем примере, удаляется. Кодек можно настроить для сохранения предыдущего изображения, установив член bKeepPrevImage в TRUE. В этом случае образ, который был текущим изображением в предыдущем примере, удаляется.

Базовая композиция кадра изображения видео определяется двумя факторами для каждого изображения: область интереса и коэффициент смешивания. Область интереса для изображения определяется точкой источника, шириной и высотой. Часть изображения, описанного областью интереса, заполняет выходной кадр. Если интересующий регион отличается от размера выходного кадра, кодек изменяет его размер. Коэффициент смешивания изображения определяет сочетание двух изображений. Коэффициенты смешивания для текущих и предыдущих образов должны составлять 1,0. Например, если fCurrBlendCoef имеет значение 0,5 и fPrevBlendCoef имеет значение 0,5, выходной кадр состоит из равного сочетания областей, интересующих обоих изображений.

Управляя областью, интересующей изображение, можно создавать эффекты сдвига и масштабирования. Коэффициенты смешения позволяют перекрестно переходить (растворяться) между изображениями. Помимо этих эффектов, можно использовать один из предопределенных переходов для создания более сложных кадров. Доступные переходы описаны в разделе Переходы изображений видео этой документации. При использовании перехода необходимо настроить каждый кадр. Самый простой способ сделать это — создать функцию, которая добавочно изменяет элементы структуры WMT_VIDEOIMAGE_SAMPLE2 для полного эффекта.

Дополнительные сведения о значениях, установленных для деформаций, см. в WMT_VIDEOIMAGE_SAMPLE2.

Заметка Если вы хотите включить звук в файл с потоком изображения видео, необходимо использовать несжатый звуковой ввод. Чтобы объединить поток изображения видео с существующим сжатым звуковым потоком, необходимо распаковать звук и передать образцы в несжатом виде. Если вы передаете сжатые образцы записи при написании потока изображения видео, возникнет ошибка, что приведет к удалению примеров из видео.

Кроме того, сжатые файлы изображений видео без аудиопотоков могут содержать несколько очень маленьких, высоко сжатых видеокадров в одном пакете ASF, что может привести к плохому воспроизведению в предыдущих версиях Проигрывателя Windows Media. Чтобы избежать этой проблемы, лучше всего вставить беззвучный аудиопоток в файл, хотя это также увеличит размер файла.

видео изображение

написание файлов ASF