使用libwebp C API创建动画,但仅对第一帧进行编码

时间:2019-04-22 09:55:50

标签: animation webp

我正在尝试将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。我遵循的是错误的示例还是什么?

非常感谢。

1 个答案:

答案 0 :(得分:0)

这可能是发生的情况:只有第一次WebPAnimEncoderAdd()才触发从YUV到argb的转换,因此rgba值保持恒定,即使YUV值稍后更改也是如此。为了解决这个问题,我设置了

frame.use_argb = true;

之前

WebPPictureAlloc(&frame);

然后复制每帧的argb字节,现在可以使用了。