ffmpeg写YUV420文件碰到阶梯型横线或者条纹状画面的原因和解决办法

这篇具有很好参考价值的文章主要介绍了ffmpeg写YUV420文件碰到阶梯型横线或者条纹状画面的原因和解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

版权声明:本文为CSDN博主「文三~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/asdasfdgdhh/article/details/112831581

看到了,转载,留着备份一下

阶梯型横线:

ffmpeg写YUV420文件碰到阶梯型横线或者条纹状画面的原因和解决办法,ffmpeg,视频编解码
条纹状画面:

ffmpeg写YUV420文件碰到阶梯型横线或者条纹状画面的原因和解决办法,ffmpeg,视频编解码
 

出现阶梯型横线的原因是:对FFmpeg中AVFrame中width与linesize的关系不明确
因为存在字节对齐,所以linesize和width的大小可能会不同
假如按照64字节对齐,width=720。那么linesize=768。其中48位多余的用0x00补齐。这48位就是阶梯型横线出现的原因。

下边的方法写就可能会出现阶梯型横线。为什么是可能呢。因为如果width正好是64的倍数,那么width=linesize,就不会出现补齐的0x00。

   y_size = pInCodecCtx->width * pInCodecCtx->height; 
   fwrite(pFrame->data[0], 1, y_size, fp);
   fwrite(pFrame->data[1], 1, y_size/4, fp);
   fwrite(pFrame->data[2], 1, y_size/4, fp);

下边两种写法都可以:

写法一(有时候也不行):

   fwrite(frame->data[0], 1, frame->linesize[0] * frame->height, out_yuv);
   fwrite(frame->data[1], 1, frame->linesize[1] * frame->height / 2, out_yuv);
   fwrite(frame->data[2], 1, frame->linesize[2] * frame->height / 2, out_yuv);

正确写法二:文章来源地址https://www.toymoban.com/news/detail-788496.html

FILE* out_yuv = fopen("C:/Users/zhou/Desktop/Mpeg2decoder/1.yuv","wb+");
AVFrame* frame = frameYUV;
frame->height = frameYUV->height;
frame->width = frameYUV->width;
 int picSize = frame->height *frame->width;
 int newSize = picSize * 1.5;
 //申请内存
 unsigned char *buf = new unsigned char[newSize];
 int a=0,i;
 for (i=0; i<frame->height; i++)
 {
     memcpy(buf+a,frame->data[0] + i * frame->linesize[0], frame->width);
     a+=frame->width;
 }
 for (i=0; i<frame->height/2; i++)
 {
     memcpy(buf+a,frame->data[1] + i * frame->linesize[1], frame->width/2);
     a+=frame->width/2;
 }
 for (i=0; i<frame->height/2; i++)
 {
     memcpy(buf+a,frame->data[2] + i * frame->linesize[2], frame->width/2);
     a+=frame->width/2;
 }
 fwrite(buf, 1, newSize, out_yuv);
 delete buf;
	buf = nullptr;

到了这里,关于ffmpeg写YUV420文件碰到阶梯型横线或者条纹状画面的原因和解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理算法大全(基于libyuv或IPP)----RGB32(ARGB)转成yuv420,RGB24,nv12,yuv422集合

    《周星星教你学ffmpeg》技巧 libyuv源码:  ok!打完收工!

    2024年02月07日
    浏览(31)
  • 如何将yuv420p图像数据转换为RGB数据并使用opencv保存为jpg图片

    yuv420是用4个byte存储4个Y的信息,用1个Byte存储U的信息,一个Byte存储V的信息, 这4个Y共用这2个U和V ,也就是用6个Byte 存储4个像素信息,也就是一个像素需要12个Bits(6*8/4),也就是12bpp。 注意yuv420p里面的p是指planar,也就是分层存储,先存全部Y的信息,然后是U的信息,最后

    2024年02月16日
    浏览(27)
  • 使用NVIDIA GPU FFmpeg转码 YUV to H264(成功)

    NVIDIA官方教程:链接,本篇内容主要参考2.2 Software Setup。 确保nvidia-smi能够正常使用: 注意要与显卡驱动版本对应,验证toolkit是否正确安装: 下载地址 编译方法:解压进入文件夹后 验证安装          显示版本号证明安装成功: 下载地址 配置方法: 进入ffmpeg-x.x文件夹

    2024年02月06日
    浏览(35)
  • 在Ubuntu虚拟机使用ffmpeg采集摄像头的yuv视频数据

    提取命令: ./cl.mp4为当前目录下的cl.mp4视频文件 -an其中a代表是audio,n代表是none,意思就是过滤掉音频 -c:v代表的是视频的编解码器 rawvideo代表我们使用rawvideo这个工具对视频进行处理 -pix_fmt yuv420p表示我们指定输出yuv视频的格式,这里我们指定为yuv420p 最后一个就是我们输出

    2023年04月11日
    浏览(70)
  • 最简单的基于 FFmpeg 的视频编码器(YUV 编码为 HEVC(H.265))

    参考雷霄骅博士的文章,链接:最简单的基于FFmpeg的视频编码器-更新版(YUV编码为HEVC(H.265)) 前一阵子做过一个基于 FFmpeg 的视频编码器的例子:最简单的基于 FFmpeg 的视频编码器(YUV 编码为 H.264)。 在该例子中,可以将 YUV 像素数据(YUV420P)编码为 H.264 码流。因为 FFmpeg

    2024年04月27日
    浏览(35)
  • FFmpeg报错:Specified pixel format yuvj420p is invalid or not supported(用ffmpeg程序查看编码器支持像素格式命令)

    这是因为我们把海康rtsp视频流packet解封装后,它frame的像素格式是 yuvj420p(AV_PIX_FMT_YUVJ420P) 的,然后我们又指定编码器上下文的像素格式 pix_fmt = AV_PIX_FMT_YUVJ420P ,指定编码器为 AV_CODEC_ID_MPEG4 ,但是 AV_CODEC_ID_MPEG4 不支持 AV_PIX_FMT_YUVJ420P 像素格式,所以报了上述错误 用 ffmpe

    2023年04月13日
    浏览(75)
  • 【编解码】记录一个ffmpeg解码生成YUV的 color range 问题,以及video_full_range_flag用法。

    注: 本文软件版本:ffmpeg 4.4 。安霸cv2x SDK 3.0.9 最近有客户在使用我们芯片的avc/hevc 编码器的提了一个问题,很有意思,我花了2天来找原因和做实验。现将过程和结论记录如此,希望能帮助到后来者。 客户使用我们的芯片去编码一段固定的YUV 序列(golden data,记为YUV-A),

    2023年04月10日
    浏览(34)
  • 视频I420裸流保存为文件

    1、从TvCamera的ABK回调的OnImageReceived出来的是I420的数据,保存文件的方式如下: 生成yuv文件后,可以用pyuv.exe软件打开,注意调整分辨率。 分辨率参数是854 * 480,但是在文件中,设置为856*480才能正常打开,这个需要注意。 yuv查看器pyuv:https://download.csdn.net/download/qq_23350817/8845

    2024年02月07日
    浏览(26)
  • [EFI]Z420电脑 Hackintosh 黑苹果efi引导文件

    硬件 型号 驱动情况 主板  Hewlett Packard Z420 Workstation 处理器 Intel Xeon E5-1650v2 已驱动 内存 8GB 2133MHz DDR4 * 2 已驱动 硬盘 闪迪 1T M.2 NVMe SSD 已驱动 显卡 RX 480 已驱动 声卡 ALC 已驱动 网卡 Intel Ethernet Connection I219-V 无线网卡+蓝牙 博通 BCM94360Z4  已驱动   支持系统版本 ✅ MacOS High

    2024年04月15日
    浏览(33)
  • FFmpeg截屏、剪切一段视频、或者压缩视频

    网上大多是通过命令的显示操作ffmpeg,不太灵活 这里我给出剪切视频的一段代码,缺点是无法精确,比如我想剪切20秒,但是可能剪切好的是23秒。 其中FFmpegFrameRecorder(outputstream)操作流会报错。原因未知。 import cn.hutool.core.io.FileUtil; import lombok.SneakyThrows; import lombok.extern.slf4j

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包