如何使用AVAssetWriter将colorProfile添加到使用CGDisplayStream从屏幕录制的视频中

时间:2018-10-25 09:47:17

标签: macos avfoundation avassetwriter video-toolbox

我编写了一个屏幕录制应用程序,可以使用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文件时,我在播放时会获得正确的颜色。

0 个答案:

没有答案