Compartir a través de


Escritura de ejemplos de imágenes de vídeo

[La característica asociada a esta página, WINDOWS Media Format 11 SDK, es una característica heredada. Se ha reemplazado por lector de origen y escritor receptor. Lector de origen y escritor receptor se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use lector fuente y escritor receptor en lugar del SDK de Windows Media Format 11, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Una secuencia de imagen de vídeo es un vídeo que contiene una serie de imágenes fijas. Las imágenes se pueden mover dentro del marco y cada imagen puede mezclarse en la siguiente. Las secuencias de imágenes de vídeo se codifican mediante el códec Windows Media Video 9 Image v2. El vídeo de salida es similar al creado por el códec Windows Media Video 9.

Para crear un perfil que contenga una secuencia de imagen de vídeo, empiece por enumerar los códecs de vídeo, tal y como se describe en Obtención de información de configuración de secuencias de códecs. Busque el códec que admite el subtipo WMMEDIASUBTYPE_WVP2.

Después de establecer el perfil en el objeto writer, llame a IWMWriter::GetInputProps para obtener las propiedades multimedia del flujo de entrada de imagen de vídeo. Obtenga el tipo de medio del objeto de propiedades multimedia llamando a IWMMediaProps::GetMediaType y cambie el subtipo a WMMEDIASUBTYPE_VIDEOIMAGE. Debe establecer el ancho y el alto de vídeo en las dimensiones máximas necesarias para abarcar las imágenes que agregará a la secuencia. A continuación, llame a IWMMediaProps::SetMediaType con el tipo de entrada modificado. Ahora está listo para empezar a enviar ejemplos al objeto writer.

Cada ejemplo debe comenzar con una estructura WMT_VIDEOIMAGE_SAMPLE2 . Además, los ejemplos pueden contener imágenes de mapa de bits. Una imagen solo se adjunta a un ejemplo para el primer fotograma en el que aparece. Todos los fotogramas adicionales que usan esa imagen solo necesitan información en la estructura. Los mapas de bits de entrada deben tener el formato RGB, 24 bits por píxel.

Los archivos de mapa de bits almacenan los datos de imagen para que los datos de cada fila de la imagen tarden un número de bytes divisibles por cuatro. (Esto se denomina el paso del mapa de bits). Esto fuerza el principio de cada fila de vídeo a un límite DWORD , lo que hace que la copia sea más eficaz. Si las filas de la imagen no se pueden dividir uniformemente en cuatro, la fila se rellena en el múltiplo más alto de cuatro bytes siguiente. Al adjuntar datos de imagen, debe quitar cualquier relleno que exista al final de los datos de cada fila.

El códec Windows Media Video 9 Image v2 mantiene hasta dos imágenes en memoria a la vez. Estas imágenes se denominan la imagen anterior y la imagen actual. Cada imagen tiene un conjunto de miembros en la estructura WMT_VIDEOIMAGE_SAMPLE2 , que determina cómo se presenta la imagen en el marco. Puede agregar una imagen estableciendo el miembro dwControlFlags de WMT_VIDEOIMAGE_SAMPLE2 en WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. Cuando se pasa un marco de entrada al códec, esa imagen se convierte en la imagen actual. La imagen que era la imagen actual del ejemplo anterior normalmente se convierte en la imagen anterior y se descarta la imagen anterior en el ejemplo anterior. Puede configurar el códec para conservar la imagen anterior estableciendo el miembro bKeepPrevImage en TRUE. En ese caso, se descarta la imagen actual en el ejemplo anterior.

La composición básica de un fotograma de imagen de vídeo viene determinada por dos factores para cada imagen: región de interés y coeficiente de mezcla. La región de interés de una imagen se define mediante un punto de origen, un ancho y un alto. La parte de una imagen descrita por la región de interés rellena el marco de salida. Si la región de interés es de un tamaño diferente al marco de salida, el códec lo cambia de tamaño. El coeficiente de mezcla de la imagen determina la fusión de las dos imágenes. Los coeficientes de mezcla de las imágenes actuales y anteriores deben tener un total de 1,0. Por ejemplo, si fCurrBlendCoef se establece en 0,5 y fPrevBlendCoef se establece en 0,5, el marco de salida se compone de una combinación igual de las regiones de interés de ambas imágenes.

Al manipular la región de interés de una imagen, puede crear efectos de panorámica y zoom. Los coeficientes de mezcla le permiten cruzar el fundido (disolver) entre las imágenes. Además de estos efectos, puedes usar una de las transiciones predefinidas para crear fotogramas más complejos. Las transiciones disponibles se describen en la sección Transiciones de imagen de vídeo de esta documentación. Al usar una transición, debe configurar cada fotograma. La manera más fácil de hacerlo es crear una función que cambie incrementalmente los miembros de la estructura WMT_VIDEOIMAGE_SAMPLE2 para obtener un efecto completo.

Para obtener más información sobre los valores que se van a establecer para las deformaciones, consulte WMT_VIDEOIMAGE_SAMPLE2.

Nota Si desea incluir audio en un archivo con una secuencia de imagen de vídeo, debe usar la entrada de audio sin comprimir. Para combinar una secuencia de imagen de vídeo con una secuencia de audio comprimida existente, debe descomprimir el audio y pasar las muestras en sin comprimir. Si pasa muestras comprimidas al escritor al escribir una secuencia de imagen de vídeo, se producirá un error, lo que provocará que se quiten las muestras del vídeo.

Además, los archivos comprimidos de imagen de vídeo sin secuencias de audio pueden contener varios fotogramas de vídeo muy pequeños y altamente comprimidos en un solo paquete ASF, lo que puede dar lugar a una mala experiencia de reproducción en versiones anteriores de Reproductor multimedia de Windows. Para evitar este problema, la mejor solución es insertar una secuencia de audio silenciosa en el archivo, aunque esto también aumentará el tamaño del archivo.

Imagen de vídeo

Escritura de archivos ASF