Комментарии 9
Можно ли ускорить или замедлить скорость видео?
Можно ли то же самое сделать на Swift 3.0?
Заранее спасибо.
Шарик
Можно ли то же самое сделать на Swift 3.0?
Заранее спасибо.
Шарик
1. Скорость видео обычно определяется количеством кадров в секунду (чем больше кадров в секунду, тем меньше скорость). В моем случае Custom Video Recorder потребовался как раз для того, чтобы снимать видео с нормальной скоростью — 30 кадров в секунду даже если на телефоне включена настройка камеры — 60 fps.
Новые модели позволяют снимать замедленное видео со скоростью до 240 кадров в секунду. В этом случае видео файл занимает очень много места. Мне нужно было уменьшить размер файла и при этом не слишком сильно ухудшить качество. Одним из возможных вариантов было сжатие видео перед отправкой. Другой вариант — создать свою камеру и задать параметры съемки, что я и сделал.
Для того, чтобы изменить параметры записи в файл, мне достаточно было пары строчек кода:
MovieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
CMTime maxDuration = CMTimeMakeWithSeconds(TOTAL_RECORDING_TIME, FRAMES_PER_SECOND);
MovieFileOutput.maxRecordedDuration = maxDuration;
Если вам нужно увеличить количество кадров в секунду, то кроме изменения константы FRAMES_PER_SECOND, потребуется еще настроить устройство видео входа. Более подробно можно посмотреть здесь — https://github.com/shu223/SlowMotionVideoRecorder
2. Я не пробовал делать на Swift, но все ссылки на AVFoundation дают примеры кода на Swift. Так что, я думаю, на Swift тоже должно работать
Новые модели позволяют снимать замедленное видео со скоростью до 240 кадров в секунду. В этом случае видео файл занимает очень много места. Мне нужно было уменьшить размер файла и при этом не слишком сильно ухудшить качество. Одним из возможных вариантов было сжатие видео перед отправкой. Другой вариант — создать свою камеру и задать параметры съемки, что я и сделал.
Для того, чтобы изменить параметры записи в файл, мне достаточно было пары строчек кода:
MovieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
CMTime maxDuration = CMTimeMakeWithSeconds(TOTAL_RECORDING_TIME, FRAMES_PER_SECOND);
MovieFileOutput.maxRecordedDuration = maxDuration;
Если вам нужно увеличить количество кадров в секунду, то кроме изменения константы FRAMES_PER_SECOND, потребуется еще настроить устройство видео входа. Более подробно можно посмотреть здесь — https://github.com/shu223/SlowMotionVideoRecorder
2. Я не пробовал делать на Swift, но все ссылки на AVFoundation дают примеры кода на Swift. Так что, я думаю, на Swift тоже должно работать
Скорость видео обычно определяется количеством кадров в секунду
Я про скорость воспроизведения видео, а не про fps, с которыми все понятно.
Скорость воспроизведения может принимать значения, отличные от 0 и 1, если для соответствующих AVPlayerItem свойства canPlaySlowForward, canPlayFastForward возвращают true.
https://developer.apple.com/reference/avfoundation/avplayer/1388846-rate
https://developer.apple.com/reference/avfoundation/avplayer/1388846-rate
Пардон, свойства плейера мне не нужны, у меня вопрос про вашу видеозапись. Упрощу диалог — можно записать видео 10 минутного заката солнца с длительностью 10 секунд?
Вы не можете изменить длительность записи видео, если запись идет напрямую в файл — AVCaptureMovieFileOutput. Вместо этого вы можете использовать AVCaptureStillImageOutput, запустить таймер и каждые 2 секунды делать снимок. За 10 минут у вас получится 300 кадров. После этого вам нужно вручную склеить эти кадры в видеоролик с помощью AVAssetWriter. Если использовать стандартные параметры — 30 кадров в секунду, то как раз получится 10 секунд видео.
Для замедленного воспроизведения отснятого видео нужно у объекта AVPlayer вместо метода -(void)play;
вызвать метод -(void)setRate:(float)rate; Скорость воспроизведения может принимать значения от 0 до 1.
0 — воспроизведение остановлено
1 — воспроизведение с нормальной скоростью.
Я добавил настройку устройства видео входа в своем проекте на GitHub — можно посмотреть как это выглядит на iPhone 6S, например.
Достаточно поменять FRAMES_PER_SECOND 240, PLAYER_RATE 0.125f
вызвать метод -(void)setRate:(float)rate; Скорость воспроизведения может принимать значения от 0 до 1.
0 — воспроизведение остановлено
1 — воспроизведение с нормальной скоростью.
Я добавил настройку устройства видео входа в своем проекте на GitHub — можно посмотреть как это выглядит на iPhone 6S, например.
Достаточно поменять FRAMES_PER_SECOND 240, PLAYER_RATE 0.125f
Я несколько раз пытался добавить эту библиотеку в свои проекты. К сожалению, при всех своих достоинствах, оба раза она мне не подошла.
Первый раз мне нужно было асинхронно обрабатывать изображения — это можно сделать только используя CPU, а данная библиотека делала все преобразования, используя графическую память GPU.
Второй раз я хотел использовать камеру, но внешний вид GPUImageVideoCamera меня не устроил, а поменять его не было возможности.
Один раз написав приложение, используя AVFoundation вместо UIImagePickerController, можно потом смело его использовать в других приложениях. При этом вы можете легко изменить внешний вид своей камеры.
Первый раз мне нужно было асинхронно обрабатывать изображения — это можно сделать только используя CPU, а данная библиотека делала все преобразования, используя графическую память GPU.
Второй раз я хотел использовать камеру, но внешний вид GPUImageVideoCamera меня не устроил, а поменять его не было возможности.
Один раз написав приложение, используя AVFoundation вместо UIImagePickerController, можно потом смело его использовать в других приложениях. При этом вы можете легко изменить внешний вид своей камеры.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Custom Video Recorder для iOS приложений