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