Создайте интервал из обычного видео в iOS

У меня есть два решения этой проблемы:

РЕШЕНИЕ А

  1. Преобразовать актив в AVMutableComposition,
  2. За каждую секунду сохраняйте только один кадр, удалив timing для всех остальных кадров, использующих removeTimeRange(...) метод.

РЕШЕНИЕ Б

  1. Использовать AVAssetReader извлечь все отдельные кадры в виде массива CMSampleBuffer
  2. Написать [CMSampleBuffer] обратно в фильм, пропуская каждые 20 кадров или около того согласно требованию.
  3. Преобразовать полученный видеофайл в AVMutableComposition и использовать scaleTimeRange(..) уменьшить в целом timeRange видео для эффекта замедленной съемки.

ПРОБЛЕМЫ

  • Первое решение не подходит для видео в формате Full HD, оно останавливается в нескольких местах, а панель поиска показывает неточное время.

Например, 12-секундный интервал может показывать только 5 секунд, поэтому он продолжает играть, даже когда поиск завершен.

Я имею в виду, что время показа видео по какой-то причине испортилось.

  • Второе решение невероятно медленное. Для 10-минутного видеовысокой четкости память будет работать до бесконечности, поскольку все выполнение выполняется в памяти.

Я ищу технику, которая может сразу создать видео, без ожидания.Решение В некотором роде это делает, но не подходит из-за проблем с синхронизацией и заиканием.

Любое предложение было бы здорово. Спасибо!

1 ответ

Возможно, вы захотите поэкспериментировать со встроенными функциями генерации миниатюр, чтобы увидеть, достаточно ли они быстры / эффективны для ваших нужд.

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

Простое отображение эскизов в виде слайд-шоу один за другим может дать вам эффект, который вы ищете.

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

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