gpt4 book ai didi

encoding - sws_scale 在较小的 x264 mp4 编码中搞砸了最后一个像素行

转载 作者:行者123 更新时间:2023-12-04 05:38:40 29 4
gpt4 key购买 nike

我正在将 PIX_FMT_ARGB 格式的图片混合到 mp4 视频中。

一切都很好,除了输出图像的最后一个像素行被搞砸了,在大多数情况下最后一行是完全黑色的,有时还有其他颜色,它似乎在某种程度上取决于它运行的机器。

我绝对确定错误必须在 sws_scale 中,因为我在缩放之前和之后保存图像。输入图像没有错误,但是在 sws_scale() 之后我保存了 yuv 图像并且错误很明显。

这是一个例子:

原创

enter image description here

Yuvfile(在 sws_scale 之后)

enter image description here

在 Yuvfile 的底部,您将看到黑色行。

这就是我进行缩放的方式(在官方 ffmpeg 示例之后,或多或少):

static int sws_flags = SWS_FAST_BILINEAR | SWS_ACCURATE_RND;

if (img_convert_ctx == NULL)
{
img_convert_ctx = sws_getContext( srcWidth, srcHeight,
PIX_FMT_ARGB,
codecContext->width, codecContext->height,
codecContext->pix_fmt,
sws_flags, NULL, NULL, NULL );
if (img_convert_ctx == NULL)
{
av_log(c, AV_LOG_ERROR, "%s","Cannot initialize the conversion context\n");
exit(1);
}
}
fill_image(tmp_picture, pic, pic_size, frame_count, ptr->srcWidth, ptr->srcHeight );

sws_scale(img_convert_ctx, tmp_picture->data, tmp_picture->linesize,
0, srcHeight, picture->data, picture->linesize);

我还尝试了许多不同的 SWS_ 标志,但都产生了相同的结果。

这可能是 sws_scale 中的错误还是我做错了什么?我正在使用最新版本的 ffmpeg 库。

最佳答案

问题是这个功能:

fill_image(tmp_picture, pic, pic_size, frame_count, ptr->srcWidth, ptr->srcHeight );

它没有正确地将输入图像复制到 tmp_picture。确实跳过了最后一行。

士气:不要相信多年的功能:D

关于encoding - sws_scale 在较小的 x264 mp4 编码中搞砸了最后一个像素行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11580559/

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