使用libwebp c api创建动画,但只编码第一帧

问题描述 投票:0回答:1

我试图将我的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并丢失。我是在遵循错误的例子还是什么?

非常感激。

animation webp
1个回答
0
投票

这可能发生了什么:只有第一次WebPAnimEncoderAdd()触发从YUV到argb的转换,因此rgba值保持不变,即使YUV值稍后更改。要解决它,我设置

frame.use_argb = true;

之前

WebPPictureAlloc(&frame);

然后复制每个帧的argb字节,它现在工作。

© www.soinside.com 2019 - 2024. All rights reserved.