The script below will process a folder and generate 1 video sample with multiple cuts from the original.
It uses moviepy^[https://zulko.github.io/moviepy/getting_started/index.html] for that.
Variables:
- CUTS = number of cuts to generate (besides intro and outro)
- CUT_DURATION = duration of each cut (besides intro and outro)
- SKIP_INTRO/ENDING = ignore X seconds from the beginning/end, as those might be title cards, etc
- INTRO_CLIPS/ENDING_CLIPS = special cuts from the beginning/ending of the video, if you want longer cuts for example
-
```python
import os
from moviepy import VideoFileClip, TextClip, CompositeVideoClip, concatenate_videoclips
INPUT_FOLDER = 'input'
RESULT_SUFFIX = "-sample1"
CUTS = 16
CUT_DURATION = 12
SKIP_INTRO = 10
SKIP_ENDING = 2 ##15
# start, duration
INTRO_CLIPS = [
(SKIP_INTRO, 15),
(SKIP_INTRO+60, 15)
]
# time from ending, duration
ENDING_CLIPS = [
(SKIP_ENDING+75, 15),
(SKIP_ENDING+30, 30)
]
files = os.listdir(INPUT_FOLDER)
for file in files:
full_filename = INPUT_FOLDER +"/"+file
result_filename = "output/" + file + RESULT_SUFFIX + ".mp4"
video = VideoFileClip(full_filename) #, target_resolution=(720, None))
duration = int(video.duration)
cut_times = []
clips = []
for cut in INTRO_CLIPS:
cut_times.append((cut[0], cut[0]+cut[1]))
calc_cuts_start = INTRO_CLIPS[-1][0] + INTRO_CLIPS[-1][1]
calc_cuts_end = duration - ENDING_CLIPS[0][0] - CUT_DURATION
interval = int((calc_cuts_end - calc_cuts_start) / CUTS)
cuts_start = calc_cuts_start + int(interval/2)
cuts_end = calc_cuts_end - int(interval/2)
for idx in range(CUTS):
start_at = (idx*interval) + cuts_start
cut_times.append((start_at, start_at + CUT_DURATION))
for cut in ENDING_CLIPS:
cut_times.append((duration-cut[0], duration-cut[0]+cut[1]))
for cut in cut_times:
clips.append(video.subclipped(cut[0], cut[1]))
final_video = concatenate_videoclips(clips)
# final_video.write_videofile(result_filename, preset="ultrafast", threads=4, fps=10, audio=False) #, ffmpeg_params=["-scale","1280:-2"])
# final_video.write_videofile(result_filename, codec="libx265")
final_video.write_videofile(result_filename, codec="libx264", preset="slower")
```