Gravando amostras de imagem de vídeo
[A funcionalidade associada a esta página, Windows Media Format 11 SDK, é uma funcionalidade herdada. Foi substituído por Source Reader e Sink Writer. Source Reader do e Sink Writer do foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize o Leitor de Origem e o Gravador de Destino em vez do SDK do Windows Media Format 11 , sempre que possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
Um fluxo de imagem de vídeo é um vídeo que contém uma série de imagens estáticas. As imagens podem se mover dentro do quadro, e cada imagem pode se misturar com a próxima. Os fluxos de imagem de vídeo são codificados usando o codec Windows Media Video 9 Image v2. O vídeo de saída é semelhante ao criado pelo codec Windows Media Video 9.
Para criar um perfil que contenha um fluxo de imagem de vídeo, comece enumerando os codecs de vídeo conforme descrito em Obtendo informações de configuração de fluxo de codecs. Procure o codec que suporta o subtipo WMMEDIASUBTYPE_WVP2.
Depois de definir o perfil no objeto gravador, chame IWMWriter::GetInputProps para obter as propriedades de mídia para o fluxo de entrada de imagem de vídeo. Obtenha o tipo de mídia do objeto de propriedades de mídia, chamando IWMMediaProps::GetMediaTypee altere o subtipo para WMMEDIASUBTYPE_VIDEOIMAGE. Você deve definir a largura e a altura do vídeo para as dimensões máximas necessárias para abranger as imagens que você adicionará ao fluxo. Em seguida, chame IWMMediaProps::SetMediaType com o tipo de entrada modificado. Agora você está pronto para começar a enviar amostras para o objeto writer.
Cada amostra deve começar com uma estrutura WMT_VIDEOIMAGE_SAMPLE2. Além disso, os exemplos podem conter imagens bitmap. Uma imagem só é anexada a uma amostra para o primeiro quadro em que aparece. Todos os quadros adicionais que usam essa imagem precisam apenas de informações na estrutura. Os bitmaps de entrada devem ser formatados como RGB, 24 bits por pixel.
Os arquivos de bitmap armazenam os dados da imagem para que os dados de cada linha da imagem tenham um número de bytes divisível por quatro. (Isso é chamado de passada do bitmap.) Isso força o início de cada linha de vídeo a um limite de DWORD, o que torna a cópia mais eficiente. Se as linhas da imagem não forem uniformemente divisíveis por quatro, a linha será preenchida para o próximo múltiplo mais alto de quatro bytes. Ao anexar dados de imagem, você deve remover qualquer preenchimento que exista no final dos dados para cada linha.
O codec Windows Media Video 9 Image v2 mantém até duas imagens na memória de cada vez. Essas imagens são chamadas de imagem anterior e imagem atual. Cada imagem tem um conjunto de membros na estrutura WMT_VIDEOIMAGE_SAMPLE2, que ditam como a imagem é apresentada no quadro. Você pode adicionar uma imagem definindo o membro dwControlFlags do WMT_VIDEOIMAGE_SAMPLE2 como WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. Quando você passa um quadro de entrada para o codec, essa imagem se torna a imagem atual. A imagem que era a imagem atual no exemplo anterior geralmente se torna a imagem anterior, e a imagem que era a imagem anterior no exemplo anterior é descartada. Você pode configurar o codec para manter a imagem anterior ao definir o membro bKeepPrevImage como TRUE. Nesse caso, a imagem que era a imagem atual no exemplo anterior é descartada.
A composição básica de um quadro de imagem de vídeo é determinada por dois fatores para cada imagem: região de interesse e coeficiente de mistura. A região de interesse de uma imagem é definida por um ponto de origem, largura e altura. A parte de uma imagem descrita pela região de interesse preenche o quadro de saída. Se a região de interesse tiver um tamanho diferente do quadro de saída, o codec a redimensiona. O coeficiente de mistura da imagem determina a mistura das duas imagens. Os coeficientes de mesclagem para as imagens atuais e anteriores devem totalizar 1,0. Por exemplo, se fCurrBlendCoef estiver definido como 0,5 e fPrevBlendCoef estiver definido como 0,5, o quadro de saída será composto por uma mistura igual das regiões de interesse de ambas as imagens.
Ao manipular a região de interesse de uma imagem, você pode criar efeitos de panorâmica e zoom. Os coeficientes de mesclagem permitem que você faça cross-fade (dissolva) entre imagens. Além desses efeitos, você pode usar uma das transições predefinidas para criar quadros mais complexos. As transições disponíveis são descritas na seção Transições de imagem de vídeo desta documentação. Ao usar uma transição, você deve configurar cada quadro. A maneira mais fácil de fazer isso é criar uma função que altera incrementalmente os membros da estrutura WMT_VIDEOIMAGE_SAMPLE2 para um efeito completo.
Para obter mais informações sobre os valores a serem definidos para deformações, consulte WMT_VIDEOIMAGE_SAMPLE2.
Observação Se você quiser incluir áudio em um arquivo com um fluxo de imagem de vídeo, você deve usar a entrada de áudio não compactado. Para combinar um fluxo de imagem de vídeo com um fluxo de áudio comprimido existente, você deve descompactar o áudio e passar as amostras descompactadas. Se forem passadas amostras compactadas para o escritor ao escrever um fluxo de vídeo, ocorrerá um erro que resultará na eliminação de amostras do vídeo.
Além disso, os arquivos de imagem de vídeo compactados sem fluxos de áudio podem conter vários quadros de vídeo muito pequenos e altamente compactados em um único pacote ASF, o que pode resultar em uma experiência de reprodução ruim em versões anteriores do Windows Media Player. Para evitar esse problema, a melhor solução é inserir um fluxo de áudio silencioso no arquivo, embora isso também aumente o tamanho do arquivo.
Tópicos relacionados