make-ffmpeg-fade: use better algorythm for determining lines

This commit is contained in:
Franziska Kunsmann 2024-03-18 14:19:36 +01:00
parent 96f410ba6a
commit ec29473d53

View file

@ -174,21 +174,28 @@ def run(command, **kwargs):
def fit_text(string: str, frame_width): def fit_text(string: str, frame_width):
split_line = [x.strip() for x in string.split()] split_line = [x.strip() for x in string.split()]
lines = "" lines = []
w = 0 w = 0
line_num = 0 line_num = 0
line = "" line = []
for word in split_line: for word in split_line:
w, _ = translation_font.getsize(" ".join([line, word])) new_line = line + [word.rstrip(':')]
print("{}, {}".format(w, line)) w, _ = translation_font.getsize(" ".join(new_line))
if w > (frame_width): print(w, new_line)
print("too wide, breaking") if w > frame_width:
lines += line.strip() + "\n" print("too wide, breaking", line)
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 return lines
@ -233,48 +240,38 @@ def enqueue_job(event):
outfile = os.path.join(os.path.dirname(args.project), event_id + '.ts') 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( videofilter = ""
fontfile=font_t, for idx, line in enumerate(t):
fontsize=title_fontsize, videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format(
fontcolor=title_fontcolor, fontfile=font_t,
x=title_x, fontsize=title_fontsize,
y=title_y, fontcolor=title_fontcolor,
text=t) x=title_x,
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( y=title_y + (idx * title_fontsize),
fade_in_start_time=title_in, text=line)
fade_in_end_time=title_in + fade_duration, 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_out_start_time=title_in + fade_duration + title_duration, fade_in_start_time=title_in,
fade_out_end_time=title_in + fade_duration + title_duration + fade_duration, fade_in_end_time=title_in + fade_duration,
fade_duration=fade_duration fade_out_start_time=title_in + fade_duration + title_duration,
) fade_out_end_time=title_in + fade_duration + title_duration + fade_duration,
videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format( fade_duration=fade_duration
fontfile=font_s, )
fontsize=speaker_fontsize,
fontcolor=speaker_fontcolor, for idx, line in enumerate(s):
x=speaker_x, videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text='{text}':".format(
y=speaker_y, fontfile=font_s,
text=s) fontsize=speaker_fontsize,
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( fontcolor=speaker_fontcolor,
fade_in_start_time=speaker_in, x=speaker_x,
fade_in_end_time=speaker_in + fade_duration, y=speaker_y + (idx * speaker_fontsize),
fade_out_start_time=speaker_in + fade_duration + speaker_duration, text=line)
fade_out_end_time=speaker_in + fade_duration + speaker_duration + fade_duration, 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_duration=fade_duration fade_in_start_time=speaker_in,
) fade_in_end_time=speaker_in + fade_duration,
videofilter += "drawtext=fontfile={fontfile}:fontsize={fontsize}:fontcolor={fontcolor}:x={x}:y={y}:text={text}:".format( fade_out_start_time=speaker_in + fade_duration + speaker_duration,
fontfile=font_tt, fade_out_end_time=speaker_in + fade_duration + speaker_duration + fade_duration,
fontsize=text_fontsize, fade_duration=fade_duration
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
)
if fileformat == '.mov': if fileformat == '.mov':
if alpha == 'true': if alpha == 'true':