关于GPUImagemovie 预览、合成视频导致原视频曝光问题

最近由于公司项目需要,用上了GPUImage 框架进行视频处理,其中踩了不少的坑。

GPUIMageMovie 解码

为了方便获取视频的sampleBuffer 以及推送到下一个关系链中,采用了 GPUImageMovie 的 部分源代码进行组装。
其中发现,解码出来的视频颜色效果与原视频有明显的差别,偏亮。

  • 原因:
    是 GPUImageMovie 中 yuvConversionSetup() 中 设置默认配置的kColorConversion709 的问题。

  • 解决方法:
    把 GPUImageColorConversion.m中修改参数就可以恢复原来的视频颜色了。

    关于GPUImagemovie 预览、合成视频导致原视频曝光问题_第1张图片
    颜色转换参考

因为通过pod 最新tag的代码 和 用git 下载Master代码, 变量所在的位置有所不同。
GPUImageVideoCameraGPUImageColorConversion 找到 kColorConversion601DefaultkColorConversion709Default的定义进行修改。

// BT.601, which is the standard for SDTV.
GLfloat kColorConversion601Default[] = {
    //    1.164,  1.164, 1.164,
    //    0.0, -0.392, 2.017,
    //    1.596, -0.813,   0.0,
    1,       1,       1,
    0, -.39465, 2.03211,
    1.13983, -.58060,       0,
};

// BT.709, which is the standard for HDTV.
GLfloat kColorConversion709Default[] = {
    //    1.164,  1.164, 1.164,
    //    0.0, -0.213, 2.112,
    //    1.793, -0.533,   0.0,
    1,       1,       1,
    0, -.21482, 2.12798,
    1.28033, -.38059,       0,
};

附上参考链接:
https://github.com/Roxasora/GPUImage/commit/f8d799b4b3b8530a956064854e8e9f0dae5b5c06#diff-6e45d120bce1ec0d189a21669de57160

你可能感兴趣的:(关于GPUImagemovie 预览、合成视频导致原视频曝光问题)