FFmpeg - RGB图像编码为h264出现垂直翻转/上下颠倒的问题
文章目录
- 1 问题描述
- 1.1 可能的原因
- 2 解决方法
1 问题描述
在Unity中或者OpenGL中抓取的帧缓冲区数据(Unity为Texture2D)即一张RGB图片数据使用ffmpeg做.h264编码后使用vlc播放出现了图像垂直颠倒的问题,如下图所示:
正常的图片:
.h264编码之后在vlc中播放出现了垂直翻转的问题:
1.1 可能的原因
RGB图像有两种存储方式:
- 一种是从上往下扫描
- 另一种是从下往上扫描。
OpenCV为从上往下扫描的方式,ffmpeg可能也是从上往下的存储方式,而OpenGL/Unity中的帧缓冲数据可能是从下往上的扫描的方式,导致了图像的垂直翻转的问题。
从上扫描的图像第一行的首地址即为图像Buffer的起始地址,而从下往上扫描的图像第一行的首地址为:buffer_data + linesize*(height-1),其中buffer_data为图像Buffer的起始地址,linesize为图像的行字节宽度,对于RGB24图像,linesize = (width * 3 + 3)/4×4,对于YUV420图像,linesize = (width + 3)/4 *4。
2 解决方法
在sws_scale之前进行RGB数据的垂直翻转,可使用以下函数:
///
/// @brief 垂直翻转RGB数据
/// @param[in] width - RGB图像宽度
/// @param[in] height - RGB图像高度
/// @param[in] rgbData - RGB图像数据指针
/// @param[in] bitsPerPixel - 每一个像素的字节大小,通常为rgbData的长度/width*height
///void h264Encoder::VerticalRotateRGBData(int width, int height, unsigned char* rgbData, int bitsPerPixel)
{unsigned char* tempRgbData = new unsigned char[width*bitsPerPixel];height--; int index = (height + 1) / 2;for (int y = 0; y < index; y++){memcpy(tempRgbData, &rgbData[y*width*bitsPerPixel], width*bitsPerPixel);memcpy(&rgbData[y*width*bitsPerPixel], &rgbData[(height - y)*width*bitsPerPixel], width*bitsPerPixel);memcpy(&rgbData[(height - y)*width*bitsPerPixel], tempRgbData, width*bitsPerPixel);}delete[] tempRgbData;
}
大家有兴趣可以访问我的个站:http://www.stubbornhuang.com
FFmpeg - RGB图像编码为h264出现垂直翻转/上下颠倒的问题相关推荐
- RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78214267 既然已经可以通过 RTSP 获取h264 裸流了.那么通过 F ...
- ffmpeg 解码视频(h264、mpeg2)输出yuv420p文件
ffmpeg 解码视频(h264.mpeg2)输出yuv420p文件 播放yuv可以参考:ffplay -pixel_format yuv420p -video_size 768x320 -frame ...
- 音视频开发(17)---RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中
RTSP再学习 -- 利用FFmpeg 将 rtsp 获取H264裸流并保存到文件中 https://blog.csdn.net/qq_29350001/article/details/7821426 ...
- 使用ffmpeg开源库将h264封装为mp4格式
最近一直在做使用ffmpeg关于读取标准h264格式内存如何封装为mp4格式文件,在经过一周的持续奋战之后在网上找了一些代码,特别的雷神的博客让我获益匪浅,开始不知道如何持续读取发送来的内存块,如何边 ...
- Windows 7(Win7)下MinGW+msys编译ffmpeg,并加入H264编码支持
可以去ffmpeg官网下载已经编译好的版本:https://ffmpeg.zeranoe.com/builds/ 该编译好的版本支持H264编码和解码 如果需要自己编译,步骤如下: 1.下载安装MSY ...
- ffmpeg基础三:H264,从MP4文件获取(av_bsf_get_by_name(“h264_mp4toannexb“))和从TS流获取保存H264
参考:零声学院 1.流媒体编解码流程 2.编码原理 在⾳视频传输过程中,视频⽂件的传输是⼀个极⼤的问题:⼀段分辨率为19201080,每个像 素点为RGB占⽤3个字节,帧率是25的视频,对于传输带宽的 ...
- 图像编码与 H264 基础知识
RGB 颜色模型 图像的采集可以通过摄像头或者截取屏幕来获取的图像数据.一幅图像可以看作为一个二维的矩阵,其中矩阵中的每一个点被称为像素.像素的颜色可以通过红.绿.蓝来表示,也就是常说的 3 基色.如 ...
- ffmpeg 多张图片合成h264编码格式的视频 按照指定时间截取 并添加 acc编码格式音乐 IOS可播放
$imgurl="./RecordingScreen/".$Filename."/%04d.jpg";//图片路径 %04d 意思是 从0001开始的四位数图片 ...
- ffmpeg使用filter生成H264测试视频(带时间戳OSD)
偶然发现ffmpeg有一个很好用的filter:testsrc.使用它可以快速生成指定格式.分辨率.时长的H264(或其他)测试视频(容器可指定),这个在某些测试环节真的很有用.特别是提供帧级精度的时 ...
最新文章
- llinux 调整swap方法
- 每日一笑 | 爱的魔力转圈圈~
- 2018.8.2 Juint测试介绍及其命名的规范
- 云漫圈 | 谈谈怎么做【服务隔离】
- VMware workstation 15.5.2及镜像文件下载
- 计算机视觉CV中RANSAN算法的学习笔记
- 【机房收费系统】---导出Excel表
- 3.8Python数据处理篇之Numpy系列(八)---Numpy的梯度函数
- 蓝讯数卡api接口,可以接通25家话费充值卡、游戏点卡官方通道,轻松完成客户快速消耗...
- php如何实现记录步数,微信步数获取-PHP后端部分
- Tomcat-startup.bat一点闪退的原因与解决方法
- 我的博客今天启用了量子统计
- python透明图片合并_Python用OpenCV合并图片,添加透明部分
- 软件架构师的“不归之路“——架构师的职责
- 计算机中c盘是什么分区,电脑C盘怎么分区
- iPhone手机使用:苹果新款手机(iPhone X、iPhone XS Max、iPhone XR等)关机、截屏等快捷键
- 荣耀30青春版怎么样?到手后远超预期!
- 2022年MinGW-w64的安装及配置教程(傻瓜式)
- #内存泄露# linux常用内存相关命令
- ben we_老WE成立手游战队!2020LOL冬季转会汇总:TSM蛇蛇
热门文章
- 打印机的设置窗口看不到已经安装的打印机列表的处理
- 魅族推荐平台架构解析(三)
- MacOS 便笺Stickies数据恢复
- SpringBoot发送邮件报错:Got bad greeting from SMTP host: smtp.exmail.qq.com, port: 465, response: [EOF]
- redis jredis jedis 使用
- 最小生成树之Prim算法和Kruskal算法
- 基于Java毕业设计迎新管理系统演示录像2020源码+系统+mysql+lw文档+部署软件
- TX2 Linux配置组播(Multicast)
- 乐视网php工资,乐视今天发工资了吗?没有
- 基于MapBox的船舶AIS数据在地图上的实时显示(仿船讯网效果)