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

原创 2013年12月05日 21:42:48

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


#include<stdio.h>

char data[1382400];  //1382400是我提前计算好的每帧的大小 每帧像素个数为1280×720,且yuv每个像素占用1.5byte的像素空间。                                          //所以每帧大小为 1280*760*1.5=1382400                                      

int main()
{
  int nFrame,size;
  FILE * in,*out;

  //获取输入序列
  in = fopen("F:\\vcTest\\Test\\1.yuv","rb+");  //rb+表示读写一个二进制的文件
  out = fopen("F:\\vcTest\\Test\\ceshi.yuv","a");  //a表示以附加的方式打开只写文件,若指定位置没有该文件,则创建该文件,
                                                                              //若存在该文件,则将要添加的内容放在在文件的末尾

  if(in==NULL)
  {
      return  -1;
  }

  fseek(in,0,SEEK_END);   //将文件指针移到文件末尾
  size=ftell(in);     //得到文件尾相对于文件首的位移,即文件的总字节数
  rewind(in);       //重置文件指针指向文件头部

  nFrame=size/1382400; //得到视频文件的总帧数

  //循环提取出奇数帧
  for(int i=1;i<=nFrame;i+=2)
  {  
    fread(data,sizeof(char),sizeof(data),in);   
    fseek(in,1382400,SEEK_CUR);
    fwrite(data,sizeof(char),sizeof(data),out);  
 
  }
  fclose(in);
  fclose(out);
  return 0;
}


程序中用到的fread,fwrite等函数在我的另一篇博文有详细介绍点击打开链接

此程序vs2012下编译通过。


转载请注明出处。





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

视频教程:YUV420和RGB相互转换--C++实现(二)

我是Gem,今天做个简单的视频,我的耳机坏了,不好意思,没有声音,请原谅~~      时间很仓促,我把作业全部做完了,完整的过程我演示你看看,有什么问题请你指出来~~     详细的代码说明和友好...

如何使用matlab从视频中提取出一帧帧图像

如何使用matlab从视频中提取出一帧帧图像  近期有需要,从视频里面提取图片,以前用软件搞的,但是现在视频太大了软件不能够一下全部将视频图片转换(因为电脑的内存不够),因此就想到使用程序读取...

对彩色YUV视频进行二进制文件读写时候的注意事项

打开并读写YUV彩色视频时,在写yuv时候,开始用的是fopen(“.......”,"r+");结果视频yuv文件,有很厉害的抖动和颜色的偏移。后来改成如下,即fopen(“.......”,"rb...

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

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

为什么有些图像在显示前要除以255?

imshow是用来显示图片的,如 >> I = imread('moon.tif'); >> figure,imshow(I); 而有时为了数据处理,要把读取的图片信息转化为更高的精度, >>...

读取YUV视频文件

如何读取YUV视频文件例如:QCIF应该是176×144若是4:2:0的QCIF,每帧图像应该是176×144个Y,44×36个U,以及44×36个V。根据资料介绍,YUV有很多格式YUY2 格式,以...

yuv文件的读取

每个像素为16比特,但yuv文件为8比特,所以,要先将图像的像素读入到8比特的内存中,再将该内存的数据读到yuv文件。

MATLAB读取YUV视频序列

  • 2012-12-26 15:10
  • 25KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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