【发布时间】:2018-02-02 04:36:18
【问题描述】:
我最简单的将 yuv 420 文件拆分为三个文件:y、u、v,通过使用代码:
int simplest_yuv420_split(char *url, int w, int h,int num){
FILE *fp=fopen(url,"rb+");
FILE *fp1=fopen("output_420_y.y","wb+");
FILE *fp2=fopen("output_420_u.y","wb+");
FILE *fp3=fopen("output_420_v.y","wb+");
unsigned char *pic=(unsigned char *)malloc(w*h*3/2);
for(int i=0;i<num;i++){
fread(pic,1,w*h*3/2,fp);
//Y
fwrite(pic,1,w*h,fp1);
//U
fwrite(pic+w*h,1,w*h/4,fp2);
//V
fwrite(pic+w*h*5/4,1,w*h/4,fp3);
}
free(pic);
fclose(fp);
fclose(fp1);
fclose(fp2);
fclose(fp3);
return 0;
}
我可以通过 ffplay 使用命令打开原始文件 ffplay -f rawvideo -pixel_format yuv420p -video_size 640x360 -i graybar_640x360.yuv
现在我要打开分割后的文件 output_420_y.y
当我运行推荐时 ffplay -f rawvideo -pixel_format yuv420p -video_size 256x256 -i output_420_v.y
显示错误: [rawvideo @ 0x7fab5283ea00] 缓冲区大小无效,数据包大小 16384
我知道这意味着文件 output_420_v.y 是原始文件的一部分,为 1/6。
谁能告诉我如何打开它?
谢谢。
【问题讨论】:
-
我原以为,现在你已经分离了 Y、U 和 V,你将有 3 个单独的灰色图像。因此,您会将 Y 通道视为大小为 640x360,像素格式为
gray。 U 和 V 通道尺寸为 320x180 和gray。 -
@MarkSetchell 是的,我有三个单独的文件,但我无法打开它们,你知道如何使用 ffplay 打开它们吗?