我正在尝试将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。我遵循的是错误的示例还是什么?
非常感谢。
答案 0 :(得分:0)
这可能是发生的情况:只有第一次WebPAnimEncoderAdd()才触发从YUV到argb的转换,因此rgba值保持恒定,即使YUV值稍后更改也是如此。为了解决这个问题,我设置了
frame.use_argb = true;
之前
WebPPictureAlloc(&frame);
然后复制每帧的argb字节,现在可以使用了。