Есть камера 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

 
 
 Сообщения
Сообщения
 
 
