小编Thi*_*zen的帖子

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

我编写了一个屏幕录制应用程序,它使用 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)!
Run Code Online (Sandbox Code Playgroud)

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

macos avfoundation avassetwriter video-toolbox

5
推荐指数
0
解决办法
315
查看次数