Как установить ожидаемую частоту кадров в 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 (частота кадров) игнорируется