#include <stdio.h>
#include <memory.h>
#include <stdlib.h>
//实现功能:裁剪yuv文件的第902帧到第1115帧
//后面的while中的函数,刚开始一直在读取,虽然读了不写(有待改进)
//可以使用fseek函数定位,可是试了一直出错
//究其原因有:偏移量必须为long型,以保证足够大,当要便宜902帧的时候,再乘以
// 每一帧的大小,已超出long型范围;
// fseek函数必须针对的是二进制文件,为顺序组合的文件,这样定位才会准确
//等待进一步优化,使其对任意yuv文件都是通用的
//暂时busy,等待周末完成
#define VIDEO_SOURCE_FILE "D:\\cudaEncode\\data\\ED_1920_1080.yuv"
#define VIDEO_OUTPUT_FILE "D:\\cudaEncode\\data\\ED_1920_1080_cut.yuv"
#define SIZE 1920*1080*3/2
#define BEGIN 902
#define END 1115
int main()
{
int count=1;
FILE *fpIn,*fpOut;
if ((fpIn=fopen(VIDEO_SOURCE_FILE,"rb"))==NULL)
{
printf("fopen() error!\n");
}
if((fpOut=fopen(VIDEO_OUTPUT_FILE,"wb"))==NULL)
{
printf("fopen() error!\n");
}
char *buf;
buf=(char *)malloc(SIZE);
memset(buf,0,SIZE);
while (!feof(fpIn)&&count<=END)
{
fread(buf,1,SIZE,fpIn);
if(count>=BEGIN&&count<=END)
{
printf("开始写入第 %4d 帧\n",count);
fwrite(buf,1,SIZE,fpOut);
}
count++;
}
printf("完成!\n");
free(buf);
buf=NULL;
fclose(fpIn);
fclose(fpOut);
return 0;
}
裁剪yuv文件的指定帧数
最新推荐文章于 2023-01-12 19:09:05 发布