读取YUV视频文件

原创 2007年09月14日 09:14:00

如何读取YUV视频文件

例如:
QCIF应该是176×144

若是4:2:0的QCIF,每帧图像应该是176×144个Y,44×36个U,以及44×36个V。


根据资料介绍,YUV有很多格式

YUY2 格式,以4:2:2 方式打包
YUYV 格式(实际格式与YUY2 相同)
YVYU 格式,以4:2:2 方式打包
UYVY 格式,以4:2:2 方式打包
带Alpha 通道的4:4:4 YUV 格式
Y41P 格式,以4:1:1 方式打包
Y411 格式(实际格式与Y41P 相同)
Y211 格式
IF09 格式
IYUV 格式
YV12 格式 (4:2:0方式打包,适用于视频会议,数字电视,DVD存储)
注:在文件中是顺序存储的(先存Y空间,然后是U空间,再是V空间)

YVU9 格式


////////////////////////////////////////////
附代码:(我的视频流就是YV12格式的)

说明:读取300帧图像,在CCS软件仿真下面可以显示。

CCS环境下面,project/Build Options/Compiler/Advanced/Memory Models选项要作设置,
选择-ml0       Aggregate data (structs/arrays) default to far


#include <stdio.h>
#define cif

#ifdef qcif
#define Y_WIDTH 176
#define Y_HEIGHT 144
#define U_WIDTH 88
#define U_HEIGHT 72
#define V_WIDTH 88
#define V_HEIGHT 72
#endif

#ifdef cif
#define Y_WIDTH 352
#define Y_HEIGHT 288
#define U_WIDTH 176
#define U_HEIGHT 144
#define V_WIDTH 176
#define V_HEIGHT 144
#endif

void ReadImage(unsigned char *pImage,char *cFileName,int nWidth,int nHeight,long offset);

unsigned char Y_space[Y_WIDTH*Y_HEIGHT];
unsigned char U_space[U_WIDTH*U_HEIGHT];
unsigned char V_space[V_WIDTH*V_HEIGHT];

main()
{int i=0;
 long origin;
 for(i=0,origin=0;i<300;i++,origin+=(Y_WIDTH*Y_HEIGHT+U_WIDTH*U_HEIGHT+V_WIDTH*V_HEIGHT))
 {
  ReadImage(Y_space,"..//bridge-close.cif",Y_WIDTH,Y_HEIGHT,origin);
  ReadImage(U_space,"..//bridge-close.cif",U_WIDTH,U_HEIGHT,Y_WIDTH*Y_HEIGHT);
  ReadImage(V_space,"..//bridge-

close.cif",V_WIDTH,V_HEIGHT,Y_WIDTH*Y_HEIGHT+U_WIDTH*U_HEIGHT);
 }
  while ( 1 );
}


void ReadImage(unsigned char *pImage,char *cFileName,int nWidth,int nHeight,long offset)
{
 int j,i;
 unsigned char *pWork;
 FILE *fp=0;

 if ( fp=fopen(cFileName,"rb" ) )   //打开一幅图像
 {
  fseek(fp,offset,SEEK_SET);   //文件定位
   pWork=pImage; //指针指向
  for ( j=0;j<nHeight;j++,pWork+=nWidth )
   for ( i=0;i<nWidth;i++ )
    fread(pWork+i,1,1,fp); //顺序读取
  fclose(fp);
 }
}

 

 

关于YUV视频的读取、播放,保存帧图片、以及处理的图像保存为YUV视频。

声明:原创博文,禁止转载。否则将追究法律责任!http://blog.csdn.net/sdlyjzh/article/details/8246752 要对YUV视频进行处理,首先要将视频保存为一帧...
  • sdlyjzh
  • sdlyjzh
  • 2012年12月01日 16:35
  • 13152

完成一个YUV文件播放器

前面匆忙写了很多篇文章,虽然都很简单,但着实花了不少时间去研究的。几年前写了YUV转换RGB的代码,当时只限于转换成BMP来测试正确性。后来一直使用YUV Player Deluxe来看YUV文件,但...
  • subfate
  • subfate
  • 2015年08月21日 13:07
  • 2806

YUV 文件读取

  • 2011年11月15日 15:50
  • 51KB
  • 下载

用Matlab读写YUV文件(备忘)

 fid=fopen(E://Record20091109-164748.yuv,rb);outfid=fopen(E://ReWrite.yuv,wb); fseek(fid,352*288*1.5...
  • qiuzhenguang
  • qiuzhenguang
  • 2009年11月10日 16:59
  • 7178

FFmpeg浅尝辄止(二)——YUV视频序列编码为视频

上一篇已经写了如何配置好开发环境,这次就先小试牛刀,来个视频的编码。搞视频处理的朋友肯定比较熟悉YUV视频序列,很多测试库提供的视频数据都是YUV视频序列,我们这里就用用YUV视频序列来做视频。关于Y...
  • yang_xian521
  • yang_xian521
  • 2012年06月28日 11:30
  • 18950

YUVplayer 读取YUV视频

  • 2014年03月13日 17:21
  • 12.51MB
  • 下载

使用OpenCV函数读入、播放视频文件并获取视频相应属性

#include "stdafx.h" #include #include   int _tmain(int argc, _TCHAR* argv[]) {     cvNamedWi...
  • fengbingchun
  • fengbingchun
  • 2012年02月24日 17:39
  • 6239

Matlab 读写yuv文件

Matlab中yuv与rgb相互转换
  • u012868357
  • u012868357
  • 2017年05月27日 11:34
  • 1548

C间隔帧读取yuv视频序列并将提取出的帧序列组成新的yuv文件

yuv格式的视频,可能是由于拍摄设备的问题,发现其中相邻两帧完全一样,为了进行后续的处理,必须将冗余去除,即要得到偶数或奇数序列的帧组成的视频,因此,利用C实现了提取与重组。对于其他格式的文件方法基本...
  • menyangyang
  • menyangyang
  • 2013年12月05日 21:42
  • 1866

用ffmpeg转换图片、视频格式yuv, C语言读取YUV图像

1.用ffmpeg将视频转换为yuv格式ffmpeg.exe -i src.avi -c:v rawvideo -pix_fmt yuv420p 1280x720.yuv输出视频可以用yuvPlaye...
  • Chunying27
  • Chunying27
  • 2016年08月28日 20:33
  • 1496
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:读取YUV视频文件
举报原因:
原因补充:

(最多只允许输入30个字)