我试图将我的c ++代码中生成的一系列图像编码为动画图像,以便更容易地查看它们。我选择了webp并遵循官方文档中的一些代码示例。我不需要调整任何参数。只要它是动画的,它就很棒。代码(https://developers.google.com/speed/webp/docs/container-api)是这样的:
WebPAnimEncoderOptions enc_options;
WebPAnimEncoderOptionsInit(&enc_options);
// Tune 'enc_options' as needed.
WebPAnimEncoder* enc = WebPAnimEncoderNew(width, height, &enc_options);
while(<there are more frames>) {
WebPConfig config;
WebPConfigInit(&config);
// Tune 'config' as needed.
WebPAnimEncoderAdd(enc, frame, timestamp_ms, &config);
}
WebPAnimEncoderAdd(enc, NULL, timestamp_ms, NULL);
WebPAnimEncoderAssemble(enc, webp_data);
WebPAnimEncoderDelete(enc);
但是,即使输入帧被双重检查并且时间戳增加,在我的输出文件中只有第一帧被编码。通过设置
enc_options.verbose = true;
我看到只有第一次运行WebPAnimEncoderAdd()时,编码器才警告我将YUV转换为rgba并丢失。我是在遵循错误的例子还是什么?
非常感激。
这可能发生了什么:只有第一次WebPAnimEncoderAdd()触发从YUV到argb的转换,因此rgba值保持不变,即使YUV值稍后更改。要解决它,我设置
frame.use_argb = true;
之前
WebPPictureAlloc(&frame);
然后复制每个帧的argb字节,它现在工作。