尝试编写使用libav
从任意视频中提取原始像素数据(~BMP)的程序。一切都很顺利,除了 sws_scale()
未能将 AVFrame
转换为 RGB24。
我制定了一个最小的示例,其中 AVFrame
正在使用互联网上找到的 4 种不同方法创建和初始化:https://github.com/SlavMFM/libav_bmp_example - 他们都以不同的方式失败。我该如何修复它以便 sws_scale()
进行转换?
最佳答案
首先,不要使用avcodec_decode_video2
。使用avcodec_send_packet
和avcodec_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/