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

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

РЕШЕНИЕ А

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

РЕШЕНИЕ Б

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

ПРОБЛЕМЫ

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

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

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

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

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

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


person Community    schedule 12.05.2017    source источник
comment
Используйте решение B, за исключением того, что изменяйте временные метки по ходу работы с CMSampleBufferCreateCopyWithNewTiming(). Тогда нет необходимости в вашем шаге 3.   -  person Rhythmic Fistman    schedule 13.05.2017
comment
Тот факт, что массив [CMSampleBuffer] вообще должен быть извлечен из assetTrack, делает это решение очень медленным, а также создает большую нагрузку на память. Это не очень хорошее решение. Я хочу держаться подальше от CMSampleBuffer. Но если ничего другого не получится, это, вероятно, будет единственный выход.   -  person    schedule 13.05.2017
comment
О, я вижу, вы не хотите сначала обрабатывать весь файл. Я пропустил это.   -  person Rhythmic Fistman    schedule 14.05.2017


Ответы (1)


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

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

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

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

person Mick    schedule 12.05.2017
comment
Спасибо за предложение, Мик, я рассмотрю его и вернусь с рабочим примером, если все пойдет так, как ожидалось. - person ; 12.05.2017