【问题标题】:I had split 420 yuv file to 420_y 420_u 420_v, how to open the three files?我已经将 420 yuv 文件拆分为 420_y 420_u 420_v,如何打开这三个文件?
【发布时间】: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 打开它们吗?

标签: c++ ffmpeg


【解决方案1】:

感谢@Mark Setchell 我使用下面的推荐是可以的。 ffplay -f rawvideo -pixel_format gray -video_size 128*128 -i output_420_v.y

【讨论】:

    【解决方案2】:

    在 Linux 上,我发现 vooya 可以轻松打开单通道(y 或 u 或 v)文件。

    【讨论】:

    • vooya 需要 HKD 202.29,太贵了,谢谢。我想通过开源库学习视频。而我选择ffmpeg来开发。我用ffplay打开这张灰图,推荐如下: ffplay -f rawvideo -pixel_format gray -video_size 128*128 -i output_420_v.y 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2020-08-09
    • 2012-01-23
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多