Share via


Écriture d’exemples d’images vidéo

[La fonctionnalité associée à cette page, le Kit de développement logiciel (SDK) Windows Media Format 11, est une fonctionnalité héritée. Il a été remplacé par lecteur source et enregistreur récepteur. Le lecteur source et l’enregistreur récepteur ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise le lecteur source et l’enregistreur récepteur au lieu du Kit de développement logiciel (SDK) Windows Media Format 11, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Un flux d’images vidéo est une vidéo qui contient une série d’images fixes. Les images peuvent se déplacer dans le cadre, et chaque image peut se fondre dans la suivante. Les flux d’images vidéo sont encodés à l’aide du codec Windows Media Video 9 Image v2. La vidéo de sortie est similaire à celle créée par le codec Windows Media Video 9.

Pour créer un profil qui contient un flux d’image vidéo, commencez par énumérer les codecs vidéo comme décrit dans Obtention d’informations de configuration de flux à partir de codecs. Recherchez le codec qui prend en charge le sous-type WMMEDIASUBTYPE_WVP2.

Une fois que vous avez défini le profil sur l’objet writer, appelez IWMWriter::GetInputProps pour obtenir les propriétés multimédias du flux d’entrée d’image vidéo. Obtenez le type de média à partir de l’objet media properties, en appelant IWMMediaProps::GetMediaType, puis remplacez le sous-type par WMMEDIASUBTYPE_VIDEOIMAGE. Vous devez définir la largeur et la hauteur de la vidéo sur les dimensions maximales nécessaires pour englober les images que vous allez ajouter au flux. Appelez ensuite IWMMediaProps::SetMediaType avec le type d’entrée modifié. Vous êtes maintenant prêt à commencer à envoyer des exemples à l’objet writer.

Chaque exemple doit commencer par une structure WMT_VIDEOIMAGE_SAMPLE2 . En outre, les exemples peuvent contenir des images bitmap. Une image n’est attachée qu’à un exemple pour la première image dans laquelle elle apparaît. Tous les cadres supplémentaires utilisant cette image ont uniquement besoin d’informations dans la structure. Les bitmaps d’entrée doivent être au format RVB, 24 bits par pixel.

Les fichiers bitmap stockent les données d’image afin que les données de chaque ligne de l’image prennent un nombre d’octets divisible par quatre. (C’est ce qu’on appelle la foulée de la bitmap.) Cela force le début de chaque ligne de vidéo à une limite DWORD , ce qui rend la copie plus efficace. Si les lignes d’image ne sont pas uniformément divisibles par quatre, la ligne est ajoutée au multiple le plus élevé suivant de quatre octets. Lorsque vous joignez des données d’image, vous devez supprimer tout remplissage qui existe à la fin des données pour chaque ligne.

Le codec Windows Media Video 9 Image v2 conserve jusqu’à deux images en mémoire à la fois. Ces images sont appelées l’image précédente et l’image actuelle. Chaque image a un ensemble de membres dans la structure WMT_VIDEOIMAGE_SAMPLE2 , qui déterminent la façon dont l’image est présentée dans le cadre. Vous pouvez ajouter une image en définissant le membre dwControlFlags de WMT_VIDEOIMAGE_SAMPLE2 sur WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. Lorsque vous passez un frame d’entrée au codec, cette image devient l’image actuelle. L’image qui était l’image actuelle dans l’exemple précédent devient généralement l’image précédente, et l’image qui était l’image précédente dans l’exemple précédent est ignorée. Vous pouvez configurer le codec pour conserver l’ancienne image précédente en définissant le membre bKeepPrevImage sur TRUE. Dans ce cas, l’image qui était l’image actuelle dans l’exemple précédent est ignorée.

La composition de base d’une image vidéo est déterminée par deux facteurs pour chaque image : la région d’intérêt et le coefficient de fusion. La région d’intérêt pour une image est définie par un point d’origine, une largeur et une hauteur. La partie d’une image décrite par la région d’intérêt remplit le cadre de sortie. Si la région d’intérêt est d’une taille différente de la trame de sortie, le codec la redimensionne. Le coefficient de fusion de l’image détermine la fusion des deux images. Les coefficients de fusion pour les images actuelles et précédentes doivent avoir un total de 1,0. Par exemple, si fCurrBlendCoef a la valeur 0,5 et que fPrevBlendCoef a la valeur 0,5, l’image de sortie est composée d’un mélange égal des régions d’intérêt des deux images.

En manipulant la région d’intérêt pour une image, vous pouvez créer des effets de panoramique et de zoom. Les coefficients de fusion vous permettent de fondu croisé (dissolution) entre les images. En plus de ces effets, vous pouvez utiliser l’une des transitions prédéfinies pour créer des images plus complexes. Les transitions disponibles sont décrites dans la section Transitions d’image vidéo de cette documentation. Lorsque vous utilisez une transition, vous devez configurer chaque image. Le moyen le plus simple consiste à créer une fonction qui modifie de façon incrémentielle les membres de la structure WMT_VIDEOIMAGE_SAMPLE2 pour obtenir un effet complet.

Pour plus d’informations sur les valeurs à définir pour les déformations, consultez WMT_VIDEOIMAGE_SAMPLE2.

Note Si vous souhaitez inclure l’audio dans un fichier avec un flux d’image vidéo, vous devez utiliser une entrée audio non compressée. Pour combiner un flux d’image vidéo avec un flux audio compressé existant, vous devez décompresser l’audio et transmettre les exemples non compressés. Si vous passez des exemples compressés à l’enregistreur lors de l’écriture d’un flux d’image vidéo, une erreur se produit, ce qui entraîne la suppression des exemples de la vidéo.

En outre, les fichiers image vidéo compressés sans flux audio peuvent contenir plusieurs images vidéo très petites et hautement compressées dans un seul paquet ASF, ce qui peut entraîner une mauvaise expérience de lecture sur les versions précédentes de Lecteur multimédia Windows. Pour éviter ce problème, la meilleure solution consiste à insérer un flux audio silencieux dans le fichier, bien que cela augmente également la taille du fichier.

Image vidéo

Écriture de fichiers ASF