关闭

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

1505人阅读 评论(1) 收藏 举报
分类:

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下编译通过。


转载请注明出处。





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:76488次
    • 积分:2548
    • 等级:
    • 排名:第14483名
    • 原创:185篇
    • 转载:9篇
    • 译文:1篇
    • 评论:6条
    最新评论