Condividi tramite


Scrittura di esempi di immagini video

[La funzionalità associata a questa pagina, Windows Media Format 11 SDK, è una funzionalità legacy. È stata sostituita dal lettore di origine e dal writer sink. Lettore di origine e writer sink sono stati ottimizzati per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi lettore di origine e writer sink anziché Windows Media Format 11 SDK, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Un flusso di immagini video è un video che contiene una serie di immagini ancora. Le immagini possono spostarsi all'interno del frame e ogni immagine può essere combinata nella successiva. I flussi di immagini video vengono codificati usando il codec Windows Media Video 9 Image v2. Il video di output è simile a quello creato dal codec Windows Media Video 9.

Per creare un profilo contenente un flusso di immagini video, iniziare enumerando i codec video come descritto in Getting Stream Configuration Information from Codecs (Ottenere informazioni di configurazione del flusso da codec). Cercare il codec che supporta il sottotipo WMMEDIASUBTYPE_WVP2.

Dopo aver impostato il profilo nell'oggetto writer, chiama IWMWriter::GetInputProps per ottenere le proprietà multimediali per il flusso di input dell'immagine video. Ottenere il tipo di supporto dall'oggetto proprietà multimediale chiamando IWMMediaProps::GetMediaType e impostando il sottotipo in WMMEDIASUBTYPE_VIDEOIMAGE. È necessario impostare la larghezza e l'altezza del video sulle dimensioni massime necessarie per includere le immagini che verranno aggiunte al flusso. Chiama quindi IWMMediaProps::SetMediaType con il tipo di input modificato. A questo punto è possibile iniziare a inviare esempi all'oggetto writer.

Ogni esempio deve iniziare con una struttura WMT_VIDEOIMAGE_SAMPLE2 . Inoltre, gli esempi possono contenere immagini bitmap. Un'immagine è collegata solo a un campione per il primo fotogramma in cui viene visualizzato. Tutti i fotogrammi aggiuntivi che usano tale immagine necessitano solo di informazioni nella struttura. Le bitmap di input devono essere formattate come RGB, 24 bit per pixel.

I file bitmap archiviano i dati dell'immagine in modo che i dati per ogni riga dell'immagine prendano un numero di byte divisibile per quattro. Questo è chiamato stride della bitmap. Questo forza l'inizio di ogni riga di video in un limite DWORD , che rende la copia più efficiente. Se le righe dell'immagine non sono divisibile in modo uniforme per quattro, la riga viene riempita al successivo multiplo più alto di quattro byte. Quando si allegano dati di immagine, è necessario rimuovere qualsiasi spaziatura interna esistente alla fine dei dati per ogni riga.

Il codec Windows Media Video 9 Image v2 mantiene fino a due immagini in memoria alla volta. Queste immagini sono denominate immagine precedente e l'immagine corrente. Ogni immagine ha un set di membri nella struttura WMT_VIDEOIMAGE_SAMPLE2 , che determinano la modalità di presentazione dell'immagine nel frame. È possibile aggiungere un'immagine impostando il membro dwControlFlags di WMT_VIDEOIMAGE_SAMPLE2 su WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. Quando si passa un frame di input al codec, tale immagine diventa l'immagine corrente. L'immagine che corrisponde all'immagine corrente nell'esempio precedente diventa in genere l'immagine precedente e l'immagine precedente nell'esempio precedente viene eliminata. È possibile configurare il codec per mantenere l'immagine precedente precedente impostando il membro bKeepPrevImage su TRUE. In tal caso, l'immagine che era l'immagine corrente nell'esempio precedente viene eliminata.

La composizione di base di un fotogramma immagine video è determinata da due fattori per ogni immagine: area di interesse e coefficiente di fusione. L'area di interesse per un'immagine è definita da un punto di origine, una larghezza e un'altezza. La parte di un'immagine descritta dall'area di interesse riempie il frame di output. Se l'area di interesse è di dimensioni diverse rispetto al frame di output, il codec lo ridimensiona. Il coefficiente di fusione dell'immagine determina la fusione delle due immagini. I coefficienti di fusione per le immagini correnti e precedenti devono essere totali di 1,0. Ad esempio, se fCurrBlendCoef è impostato su 0,5 e fPrevBlendCoef è impostato su 0,5, il frame di output è composto da una combinazione uguale delle aree di interesse da entrambe le immagini.

Modificando l'area di interesse per un'immagine, è possibile creare effetti di panoramica e zoom. I coefficienti di fusione consentono di dissolvenza incrociata (dissolvenza) tra le immagini. Oltre a questi effetti, è possibile usare una delle transizioni predefinite per creare fotogrammi più complessi. Le transizioni disponibili sono descritte nella sezione Transizioni di immagini video di questa documentazione. Quando si usa una transizione, è necessario configurare ogni frame. Il modo più semplice per eseguire questa operazione consiste nel creare una funzione che modifica in modo incrementale i membri della struttura WMT_VIDEOIMAGE_SAMPLE2 per un effetto completo.

Per ulteriori informazioni sui valori da impostare per le deformazioni, vedere WMT_VIDEOIMAGE_SAMPLE2.

Nota Se vuoi includere audio in un file con un flusso di immagine video, devi usare l'input audio non compresso. Per combinare un flusso di immagini video con un flusso audio compresso esistente, è necessario decomprimere l'audio e passare gli esempi in non compressi. Se si passano campioni compressi al writer durante la scrittura di un flusso di immagini video, si verificherà un errore, causando l'eliminazione di campioni dal video.

Inoltre, i file immagine video compressi senza flussi audio possono contenere diversi fotogrammi video molto piccoli e altamente compressi in un singolo pacchetto ASF, il che può comportare un'esperienza di riproduzione scarsa nelle versioni precedenti di Lettore multimediale Windows. Per evitare questo problema, la soluzione migliore consiste nell'inserire un flusso audio silenzioso nel file, anche se ciò aumenterà anche le dimensioni del file.

Immagine video

Scrittura di file ASF