From 96f410ba6a4b5d33938e44f851d97cd58b345214 Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Mon, 18 Mar 2024 14:19:08 +0100 Subject: [PATCH 1/2] make-ffmpeg-fade: fix missing import --- make-ffmpeg-fade.py | 1 + 1 file changed, 1 insertion(+) diff --git a/make-ffmpeg-fade.py b/make-ffmpeg-fade.py index f4e88a3..7339a9d 100755 --- a/make-ffmpeg-fade.py +++ b/make-ffmpeg-fade.py @@ -5,6 +5,7 @@ import os import sys import subprocess import renderlib +import schedulelib import argparse import shlex from PIL import ImageFont From ec29473d53a808d78a56bbbf299200bebf93d4c5 Mon Sep 17 00:00:00 2001 From: Franziska Kunsmann Date: Mon, 18 Mar 2024 14:19:36 +0100 Subject: [PATCH 2/2] make-ffmpeg-fade: use better algorythm for determining lines --- make-ffmpeg-fade.py | 101 +++++++++++++++++++++----------------------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/make-ffmpeg-fade.py b/make-ffmpeg-fade.py index 7339a9d..976c858 100755 --- a/make-ffmpeg-fade.py +++ b/make-ffmpeg-fade.py @@ -174,21 +174,28 @@ def run(command, **kwargs): def fit_text(string: str, frame_width): split_line = [x.strip() for x in string.split()] - lines = "" + lines = [] w = 0 line_num = 0 - line = "" + line = [] for word in split_line: - w, _ = translation_font.getsize(" ".join([line, word])) - print("{}, {}".format(w, line)) - if w > (frame_width): - print("too wide, breaking") - lines += line.strip() + "\n" - line = "" + new_line = line + [word.rstrip(':')] + w, _ = translation_font.getsize(" ".join(new_line)) + print(w, new_line) + if w > frame_width: + print("too wide, breaking", line) + lines.append(' '.join(line)) + line = [] - line += word + " " + line.append(word.rstrip(':')) - lines += line.strip() + if word.endswith(':'): + print(':, breaking', line) + lines.append(' '.join(line)) + line = [] + + if line: + lines.append(' '.join(line)) return lines @@ -233,48 +240,38 @@ def enqueue_job(event): outfile = os.path.join(os.path.dirname(args.project), event_id + '.ts') - videofilter = "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format( - fontfile=font_t, - fontsize=title_fontsize, - fontcolor=title_fontcolor, - x=title_x, - y=title_y, - text=t) - videofilter += "alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))',".format( - fade_in_start_time=title_in, - fade_in_end_time=title_in + fade_duration, - fade_out_start_time=title_in + fade_duration + title_duration, - fade_out_end_time=title_in + fade_duration + title_duration + fade_duration, - fade_duration=fade_duration - ) - videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format( - fontfile=font_s, - fontsize=speaker_fontsize, - fontcolor=speaker_fontcolor, - x=speaker_x, - y=speaker_y, - text=s) - videofilter += "alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))',".format( - fade_in_start_time=speaker_in, - fade_in_end_time=speaker_in + fade_duration, - fade_out_start_time=speaker_in + fade_duration + speaker_duration, - fade_out_end_time=speaker_in + fade_duration + speaker_duration + fade_duration, - fade_duration=fade_duration - ) - videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text={text}:".format( - fontfile=font_tt, - fontsize=text_fontsize, - fontcolor=text_fontcolor, - x=text_x, - y=text_y, - text=text_text) - videofilter += "alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))'".format( - fade_in_start_time=text_in, - fade_in_end_time=text_in + fade_duration, - fade_out_start_time=text_in + fade_duration + text_duration, - fade_out_end_time=text_in + fade_duration + text_duration + fade_duration, - fade_duration=fade_duration - ) + videofilter = "" + for idx, line in enumerate(t): + videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format( + fontfile=font_t, + fontsize=title_fontsize, + fontcolor=title_fontcolor, + x=title_x, + y=title_y + (idx * title_fontsize), + text=line) + videofilter += "alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))',".format( + fade_in_start_time=title_in, + fade_in_end_time=title_in + fade_duration, + fade_out_start_time=title_in + fade_duration + title_duration, + fade_out_end_time=title_in + fade_duration + title_duration + fade_duration, + fade_duration=fade_duration + ) + + for idx, line in enumerate(s): + videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format( + fontfile=font_s, + fontsize=speaker_fontsize, + fontcolor=speaker_fontcolor, + x=speaker_x, + y=speaker_y + (idx * speaker_fontsize), + text=line) + videofilter += "alpha='if(lt(t,{fade_in_start_time}),0,if(lt(t,{fade_in_end_time}),(t-{fade_in_start_time})/{fade_duration},if(lt(t,{fade_out_start_time}),1,if(lt(t,{fade_out_end_time}),({fade_duration}-(t-{fade_out_start_time}))/{fade_duration},0))))',".format( + fade_in_start_time=speaker_in, + fade_in_end_time=speaker_in + fade_duration, + fade_out_start_time=speaker_in + fade_duration + speaker_duration, + fade_out_end_time=speaker_in + fade_duration + speaker_duration + fade_duration, + fade_duration=fade_duration + ) if fileformat == '.mov': if alpha == 'true':