gpt4 book ai didi

c++ - BGRA 到 YUV420 FFmpeg 输出不良

转载 作者:行者123 更新时间:2023-12-02 09:58:11 27 4
gpt4 key购买 nike

我的目的是录屏。我正在使用 Windows DXGI API 接收屏幕截图,并使用 libx264 将屏幕截图编码为视频。将 BGRA 图像直接馈送到 libx264 会在输出视频中产生奇怪的颜色。因此,为了获得正确的颜色,我正在尝试将 BGRA 转换为 YUV420p。为了加快编码速度,我还尝试缩小 BGRA 图像。
所以我得到一个 1920x1080 BGRA 图像,我想将它转换为 1280x720 YUV420p。为此,我使用 FFmpeg swscale 库来进行格式转换和缩小。
问题是输出视频就像同一帧中的 3 个图像一样。请看这个视频。 https://imgur.com/a/EYimjrJ
我只尝试了 BGRA 到 YUV 的转换,没有任何缩减,它工作正常。但是 BGRA 到 YUV 的缩小会带来这个问题。
这个问题的原因是什么?我如何解决它?
这是我的代码片段:

uint8_t* Image;
x264_picture_t picIn, picOut;
x264_picture_alloc(&picIn, X264_CSP_I420, 1280, 720);

SwsContext* sws = sws_getContext(1920, 1080, AV_PIX_FMT_BGRA, 1280, 720, AV_PIX_FMT_YUV420P, SWS_BILINEAR, NULL, NULL, NULL);

while (true)
{
take_screenshot(&Image);

AVFrame BGRA;
BGRA.linesize[0] = 1280 * 4;
BGRA.data[0] = Image;
sws_scale(sws, BGRA.data, BGRA.linesize, 0, 1080, picIn.img.plane, picIn.img.i_stride);

nal_size = x264_encoder_encode(h, &nals, &nal_count, &picIn, &picOut);
save_to_flv(nals, nal_size, nal_count);
}
这是我的 libx264 参数:
        x264_param_default_preset(&param, preset, 0);
param.i_csp = X264_CSP_I420;
param.i_width = 1280;
param.i_height = 720;
param.i_fps_num = 30;
param.i_fps_den = 1;
param.rc.i_bitrate = 2500;
param.i_bframe = 0;
param.b_repeat_headers = 0;
param.b_annexb = 1;

x264_param_apply_profile(&param, 0);
h = x264_encoder_open(&param);

最佳答案

更改BGRA.linesize[0]成为 1920*4 .您会看到这 3 个图像模式,因为

1240*3 == 1920*2

关于c++ - BGRA 到 YUV420 FFmpeg 输出不良,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64224750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com