5

我编写了一个屏幕录制应用程序,它使用 VideoToolbox 和 AVWriter 写出 H.264 电影文件。与原始屏幕相比,录制文件中的颜色有些暗淡。我知道这是因为 colorProfile 没有存储在视频文件中。

这与如何颜色管理 AVAssetWriter 输出密切相关

我已经创建了一个测试平台来在 github ScreenRecordTest上展示它

如果您运行此应用程序,您可以使用 CMD-R 开始录制并使用相同的 CMD-R 停止录制(您必须开始和停止录制一次才能获得完整的电影文件)。您将在 /tmp/ 文件夹中找到类似以下名称的录音:“/tmp/grab-2018-10-25 09:23:32 +0000.mov”

录制时,应用程序会显示两个实时图像:a)从 CGDisplayStream 获取的帧 -b)来自压缩器的 cmSampleBuffer。

我发现从 CGDisplayStream 返回的 IOSurface 不是颜色管理的,所以你会注意到压缩之前已经出现了“暗淡”的颜色。如果您取消注释 AppDelegate.swift 中的第 89 行

// cgImage = cgImage.copy(colorSpace: screenColorSpace)!

此实时预览将具有正确的颜色。现在这仅用于显示压缩前的 IOSurface。我不知道如何使其他实时预览(压缩后)(AppDelegate 中的第 69 行)显示正确的颜色(例如:如何将 colorProfile 应用于 CMSampleBuffer)或者最重要的是如何用正确的配置文件,以便在打开 .mov 文件时我在播放时获得正确的颜色。

4

0 回答 0