in scripts/generate_video_side_by_side_standalone.py [0:0]
def build_side_by_side(base_video, new_video, base_ind, new_ind, output_dir, filename):
before_vid = pathlib.Path(output_dir, "before.mp4")
after_vid = pathlib.Path(output_dir, "after.mp4")
before_cut_vid = pathlib.Path(output_dir, "before-cut.mp4")
after_cut_vid = pathlib.Path(output_dir, "after-cut.mp4")
before_rs_vid = pathlib.Path(output_dir, "before-rs.mp4")
after_rs_vid = pathlib.Path(output_dir, "after-rs.mp4")
for apath in (
before_vid,
after_vid,
before_cut_vid,
after_cut_vid,
before_rs_vid,
after_rs_vid,
):
if apath.exists():
apath.unlink()
overlay_text = (
"fps=fps=60,drawtext=text={}\\\\ :fontsize=(h/30):fontcolor=black:y=10:"
+ "timecode=00\\\\:00\\\\:00\\\\:00:rate=60*1000/1001:fontcolor=white:x=(w-tw)/2:"
+ "y=10:box=1:boxcolor=0x00000000@1[vid]"
)
common_options = [
"-map",
"[vid]",
"-c:v",
"libx264",
"-crf",
"18",
"-preset",
"veryfast",
]
# Cut the videos
subprocess.check_output(
["ffmpeg", "-i", str(base_video), "-vf", "select=gt(n\\,%s)" % base_ind]
+ [str(before_cut_vid)]
)
subprocess.check_output(
["ffmpeg", "-i", str(new_video), "-vf", "select=gt(n\\,%s)" % new_ind]
+ [str(after_cut_vid)]
)
# Resample
subprocess.check_output(
["ffmpeg", "-i", str(before_cut_vid), "-filter:v", "fps=fps=60"]
+ [str(before_rs_vid)]
)
subprocess.check_output(
["ffmpeg", "-i", str(after_cut_vid), "-filter:v", "fps=fps=60"]
+ [str(after_rs_vid)]
)
# Generate the before and after videos
subprocess.check_output(
[
"ffmpeg",
"-i",
str(before_rs_vid),
"-filter_complex",
overlay_text.format("firefox"),
]
+ common_options
+ [str(before_vid)]
)
subprocess.check_output(
[
"ffmpeg",
"-i",
str(after_rs_vid),
"-filter_complex",
overlay_text.format("chrome"),
]
+ common_options
+ [str(after_vid)]
)
subprocess.check_output(
[
"ffmpeg",
"-i",
str(before_vid),
"-i",
str(after_vid),
"-filter_complex",
"[0:v]pad=iw*2:ih[int];[int][1:v]overlay=W/2:0[vid]",
]
+ common_options
+ [str(pathlib.Path(output_dir, filename))]
)