Если нельзя, но очень хочется, то нужно обязательно и ничего в мире не стоит того, чтобы делать из этого проблему!


Интересна Java? Кликай по ссылке и изучай!
Если тебе полезно что-то из того, чем я делюсь в своем блоге - можешь поделиться своими деньгами со мной.
с пожеланием
столько времени читатели провели на блоге - 
сейчас онлайн - 

воскресенье, 31 августа 2014 г.

Avisynth скрипт для реализвации slow motion

Есть камера gopro - в ней есть режим со съемкой на скорости 120 кадров в секунду. Его и использовал.  Звук писал отдельно диктофоном, потому как камера в звуконепроницаемом боксе (камеру обливал водой :)) - естественно между аудио и видео случился рассинхрон. Снято было все со штатива, камера размещалась необычно вертикально (видео надобно потом перевернуть).

Что вышло


Вот сам скрипт, может кому и пригодится

video_audio_sync = 610 # на это количество кадров видео опережает аудио

# грузим видео, обрезаем первые N кадров для синхронизации с аудио и убиваем аудио (там все равно буль буль)
v = DirectShowSource("video.MP4").Trim(video_audio_sync, 0).KillAudio() 

# грузим аудио
a = DirectShowSource("audio.MP3")

clip_start = 4858 # если вырезать все левое, то где-то тут начинается самое интересное
clip_len = 4378 # длинной в столько кадров

# мерджим видео с новым аудио, обрезаем то что должно пойти в эфир и вставляем 
v = AudioDub(v,a).Trim(clip_start, 0).Trim(0, clip_len).FadeOut(200).FadeIn(100)

slow_start = 2469 + 100 # место в котором надо включить slo-mo
slow_end = 2900 - 50 # тут заканчиваем slo-mo

# делим видео+аудио на три части
v1 = v.Trim(0, slow_start)
v2 = v.Trim(slow_start, slow_end)
v3 = v.Trim(slow_end, 0)

target_fps = 30 # столько кадров/сек хочу на выходе
source_fps = 120 # столько кадров/сек было на входе

# первый и третий ролики приводим к 30 кадрам удаляя лишние
# а второй ролик надо растянуть, показав все кадры но с частотой 30 кадров/сек - от этого он растянется по времени, потому-то надо подтянуть еще и аудио
v1 = v1.ChangeFPS(target_fps)
v2 = v2.AssumeFPS(target_fps).TimeStretch(tempo=(100.0*target_fps)/source_fps)
v3 = v3.ChangeFPS(target_fps)

# снимал видео вертикально и потому надо перевернуть, а так же обрезать слева справа сверху и снизу
r = TurnLeft(v1+v2+v3).Crop(160, 260, -160, -250)

# результат вернуть
r