Создайте интервал из обычного видео в iOS
У меня есть два решения этой проблемы:
РЕШЕНИЕ А
- Преобразовать актив в
AVMutableComposition
, - За каждую секунду сохраняйте только один кадр, удалив
timing
для всех остальных кадров, использующихremoveTimeRange(...)
метод.
РЕШЕНИЕ Б
- Использовать
AVAssetReader
извлечь все отдельные кадры в виде массиваCMSampleBuffer
- Написать
[CMSampleBuffer]
обратно в фильм, пропуская каждые 20 кадров или около того согласно требованию. - Преобразовать полученный видеофайл в
AVMutableComposition
и использоватьscaleTimeRange(..)
уменьшить в целомtimeRange
видео для эффекта замедленной съемки.
ПРОБЛЕМЫ
- Первое решение не подходит для видео в формате Full HD, оно останавливается в нескольких местах, а панель поиска показывает неточное время.
Например, 12-секундный интервал может показывать только 5 секунд, поэтому он продолжает играть, даже когда поиск завершен.
Я имею в виду, что время показа видео по какой-то причине испортилось.
- Второе решение невероятно медленное. Для 10-минутного видеовысокой четкости память будет работать до бесконечности, поскольку все выполнение выполняется в памяти.
Я ищу технику, которая может сразу создать видео, без ожидания.Решение В некотором роде это делает, но не подходит из-за проблем с синхронизацией и заиканием.
Любое предложение было бы здорово. Спасибо!
1 ответ
Возможно, вы захотите поэкспериментировать со встроенными функциями генерации миниатюр, чтобы увидеть, достаточно ли они быстры / эффективны для ваших нужд.
Их преимущество заключается в том, что они оптимизированы для эффективной генерации изображений из видеопотока.
Простое отображение эскизов в виде слайд-шоу один за другим может дать вам эффект, который вы ищете.
Существует информация о классе ключей, AVAssetImageGenerator, в том числе о том, как использовать его для создания нескольких изображений: