ffmpeg - 为 sws_scale() 分配 AVFrame

标签 ffmpeg libav libavcodec

尝试编写使用libav从任意视频中提取原始像素数据(~BMP)的程序。一切都很顺利,除了 sws_scale() 未能将 AVFrame 转换为 RGB24。

我制定了一个最小的示例,其中 AVFrame 正在使用互联网上找到的 4 种不同方法创建和初始化:https://github.com/SlavMFM/libav_bmp_example - 他们都以不同的方式失败。我该如何修复它以便 sws_scale() 进行转换?

最佳答案

首先,不要使用avcodec_decode_video2。使用avcodec_send_packetavcodec_receive_frame

第二,不要在源上调用av_frame_get_buffer,只需使用av_frame_alloc分配它,avcodec_receive_frame将设置其余的

然后分配一个目标帧框架,如下所示:

AVFrame* frame = av_frame_alloc();
frame->format = whatever;
frame->width = w;
frame->height = h;
av_frame_get_buffer(frame, 32);

关于ffmpeg - 为 sws_scale() 分配 AVFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60670984/

相关文章:

c++ - 如何在 C/C++ 中使用 FFmpeg API 覆盖过滤器

ffmpeg - 使用 libavformat 解复用和解码原始 RTP

android - 交叉编译 librtmp for android

haskell - 我无法在 Windows 10 上安装 ffmpeg-light

opencv - 拜耳数据的无损编解码器

python - 如何从 .yuv 视频文件中提取某些帧并使用 FFmpeg、OpenCV 和 python 创建新视频?

ffmpeg - libav ffmpeg 多流性能问题

c - av_write_header - 样本格式错误

ffmpeg - libavcodec 初始化实现实时播放,必要时丢帧

image - AVFrame 到 RGB - 解码伪影