Как установить ожидаемую частоту кадров в AVAssetWriterInput

У меня есть приложение, которое по-разному кодирует видео и сохраняет его в библиотеке фотографий - оно может сократить определенный временной диапазон, добавить картинки, текст и т. Д. Все работает отлично, пока я не попытаюсь кодировать видео со скоростью 120+ кадров в секунду. Проблема в том, что видео кажется замедленным, и я вообще не преследую эту цель.

Здесь я узнал о недвижимости для AVAssetWritterInput который называется AVVideoExpectedSourceFrameRateKey, но проблема в том, что когда я пытаюсь применить этот параметр к моей AVAssetWritterInputЯ получаю эту ошибку:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[AVAssetWriterInput initWithMediaType:outputSettings:sourceFormatHint:] Output settings dictionary contains one or more invalid keys: ExpectedFrameRate'

Вот мой AVAssetWriterInput инициализация, ничего особенного:

let input = AVAssetWriterInput(mediaType: AVMediaTypeVideo, outputSettings: [AVVideoCodecKey: AVVideoCodecJPEG,
                                                                                         AVVideoHeightKey: correctedContentSize.height,
                                                                                         AVVideoWidthKey: correctedContentSize.width,
                                                                                         AVVideoExpectedSourceFrameRateKey: 60])

Любая помощь будет оценена. Благодарю.

1 ответ

Проблема возникает из-за того, как вы помещаете ключ в свой Словарь для загрузки настроек в outputSettings. Ключ «AVVideoExpectedSourceFrameRateKey» фактически должен находиться во вложенном словаре, а ключ для него - «AVVideoCompressionPropertiesKey». Таким образом, вместо outputSettings у вас есть своего рода Словарь словарей. Это должно выглядеть примерно так:

      let outputSettings:[String: Any] = [
            AVVideoCodecKey: AVVideoCodecJPEG,
            AVVideoHeightKey: correctedContentSize.height,
            AVVideoWidthKey: correctedContentSize.width
            AVVideoCompressionPropertiesKey: 
               [AVVideoExpectedSourceFrameRateKey: 60]                                         
        ]

Более подробную информацию об этом процессе можно найти здесь, если вы хотите использовать это для настройки канала при воспроизведении этого видео:

AVAssetWriter AVVideoExpectedSourceFrameRateKey (частота кадров) игнорируется

Другие вопросы по тегам