首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在.webm视频中使用c++中的ffmpeg读取α通道

如何在.webm视频中使用c++中的ffmpeg读取α通道
EN

Stack Overflow用户
提问于 2022-10-27 05:26:53
回答 1查看 74关注 0票数 1

背景

我有一个.webm文件(pix_fmt: yuva420p)从.mov视频文件转换而来,以减少文件大小,我希望使用c++读取视频数据,因此我使用这个存储库作为参考。

这在.mov视频上非常有效。

问题

但是,通过使用相同的repo,.webm视频没有alpha通道数据(该通道上为纯零),但我可以从.mov视频中获取alpha数据。

显然,许多人民已经注意到,在视频转换之后,ffmpeg以某种方式将视频检测为yuv420p + alpha_mode : 1,因此没有使用alpha通道,但没有人讨论如何解决这一问题。

我试图强迫像素格式在这一部分使用yuva420p,但这只是打破了整个程序。

代码语言:javascript
运行
复制
  // Set up sws scaler
    if (!sws_scaler_ctx) {
        auto source_pix_fmt = correct_for_deprecated_pixel_format(av_codec_ctx->pix_fmt);
        sws_scaler_ctx = sws_getContext(width, height, source_pix_fmt,
                                        width, height, AV_PIX_FMT_RGB0,
                                        SWS_BILINEAR, NULL, NULL, NULL);
    }

我还验证了我的视频是否包含使用其他来源的alpha通道,所以我确信我的webm视频中有alpha通道,但是我不能使用ffmpeg获取数据。

有没有一种获取alpha数据的方法?其他视频格式或使用其他库工作,只要它有一些文件压缩,但我需要访问c++的数据。

注意事项:这是我用来将视频转换成webm的代码

代码语言:javascript
运行
复制
ffmpeg -i input.mov -c:v libvpx-vp9 -pix_fmt yuva420p output.webm
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-27 09:33:48

你得强迫解码器。

avformat_open_input()之前设置以下内容

代码语言:javascript
运行
复制
AVCodec *vcodec;
vcodec = avcodec_find_decoder_by_name("libvpx-vp9");
av_fmt_ctx->video_codec = vcodec;
av_fmt_ctx->video_codec_id = vcodec->id;

您不需要设置像素格式或任何缩放的args。

这假设您的libavcodec与libvpx链接。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74217172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档