Как добавить colorProfile с помощью AVAssetWriter к видео, записанному с экрана с помощью CGDisplayStream - PullRequest
0 голосов
/ 25 октября 2018

Я написал приложение для записи экрана, которое записывает видеофайлы H.264, используя VideoToolbox и AVWriter.Цвета в записанных файлах немного тусклые по сравнению с исходным экраном.Я знаю, что это потому, что colorProfile не сохраняется в видеофайле.

Это тесно связано с Как управлять цветом при выводе AVAssetWriter

Я создалтестовый стенд, чтобы показать это на github ScreenRecordTest

Если вы запустите это приложение, вы можете начать запись с помощью CMD-R и остановить его с помощью того же CMD-R (вы должны начать и остановить запись один разполучить полностью написанный файл фильма).Вы найдете запись в папке / tmp / под именем, похожим на это: "/ tmp / grab-2018-10-25 09:23:32 + 0000.mov"

При записи приложение показываетдва живых изображения: а) кадр, полученный из CGDisplayStream -и-б) cmSampleBuffer, который вышел из компрессора.

Я обнаружил, что IOSurface, возвращаемый из CGDisplayStream, не управляется цветом,так что вы заметите «тусклые» цвета уже перед сжатием.Если вы откомментируете строку 89 в AppDelegate.swift

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

, этот предварительный просмотр будет иметь правильные цвета.Теперь это только для отображения IOSurface перед сжатием.Я понятия не имею, как заставить другой live-preview (после сжатия) (строка 69 в AppDelegate) показывать правильные цвета (скажем: как применить colorProfile к CMSampleBuffer) или наиболее важно как пометьте записанный видеофайл правильным профилем , чтобы при открытии файла .mov при воспроизведении были получены правильные цвета.

...