我编写了一个屏幕录制应用程序,可以使用VideoToolbox和AVWriter写出H.264电影文件。与原始屏幕相比,录制文件中的颜色有些暗淡。我知道这是因为colorProfile没有存储在视频文件中。
这与How to color manage AVAssetWriter output
密切相关我创建了一个测试平台,以在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)或最重要如何< strong>使用正确的配置文件标记已写入的视频文件,这样,当打开.mov文件时,我在播放时会获得正确的颜色。