Make intro title fade optional

This commit is contained in:
hbrain 2026-05-28 16:56:35 +00:00
parent af3fd51226
commit f51273d447
2 changed files with 34 additions and 15 deletions

View file

@ -36,13 +36,14 @@ FFMPEG = BASE_DIR / "ffmpeg" / "ffmpeg"
FFPROBE = BASE_DIR / "ffmpeg" / "ffprobe"
INTRO_LOGO_NAME = "intro.png"
DEFAULT_INTRO_LOGO = BASE_DIR / "img" / "moto_travel.png"
INTRO_LOGO_TARGET_HEIGHT_RATIO = 0.90
INTRO_LOGO_TARGET_HEIGHT_RATIO = 0.75
INTRO_LOGO_EXTRA_HOLD = 6.0
INTRO_LOGO_FADE_OFFSET = 3.0
INTRO_LOGO_DEFAULT_ALPHA = 1.0
INTRO_TITLE_FADE_DELAY = 2.0
INTRO_TITLE_START_OFFSET = 4.0
INTRO_TITLE_FADE_LENGTH = 1.0
INTRO_TITLE_VISIBLE = 6.0
INTRO_TITLE_FADE_ENABLED = True
DEFAULT_IMAGE_DURATION = 6.0
DEFAULT_CROSSFADE_DURATION = 3.0
FIRST_IMAGE_DURATION_MULTIPLIER = 2.0
@ -1001,17 +1002,34 @@ def build_video(
subtitle_font_size = max(40, height // 18)
main_title = data.title or title_lines[0]
subtitle = " | ".join(x for x in [data.date, data.place] if x)
fade_in_start = INTRO_TITLE_FADE_DELAY
fade_in_end = fade_in_start + INTRO_TITLE_FADE_LENGTH
visible_end = fade_in_end + INTRO_TITLE_VISIBLE
fade_out_end = visible_end + INTRO_TITLE_FADE_LENGTH
title_alpha = (
f"if(lt(t\\,{fade_in_start:.3f})\\,0\\,"
f"if(lt(t\\,{fade_in_end:.3f})\\,(t-{fade_in_start:.3f})/{INTRO_TITLE_FADE_LENGTH:.3f}\\,"
f"if(lt(t\\,{visible_end:.3f})\\,1\\,"
f"if(lt(t\\,{fade_out_end:.3f})\\,({fade_out_end:.3f}-t)/{INTRO_TITLE_FADE_LENGTH:.3f}\\,0))))"
)
title_enable = f"enable='between(t,{fade_in_start:.3f},{fade_out_end:.3f})'"
fade_in_start = INTRO_TITLE_START_OFFSET
fade_in_enabled = INTRO_TITLE_FADE_IN_ENABLED and INTRO_TITLE_FADE_LENGTH > 0
fade_out_enabled = INTRO_TITLE_FADE_LENGTH > 0
fade_in_end = fade_in_start + (INTRO_TITLE_FADE_LENGTH if fade_in_enabled else 0.0)
visible_start = fade_in_end if fade_in_enabled else fade_in_start
visible_end = visible_start + INTRO_TITLE_VISIBLE
fade_out_end = visible_end + (INTRO_TITLE_FADE_LENGTH if fade_out_enabled else 0.0)
if fade_in_enabled:
title_alpha = (
f"if(lt(t\\,{fade_in_start:.3f})\\,0\\,"
f"if(lt(t\\,{fade_in_end:.3f})\\,(t-{fade_in_start:.3f})/{INTRO_TITLE_FADE_LENGTH:.3f}\\,"
f"if(lt(t\\,{visible_end:.3f})\\,1\\,"
f"if(lt(t\\,{fade_out_end:.3f})\\,({fade_out_end:.3f}-t)/{INTRO_TITLE_FADE_LENGTH:.3f}\\,0))))"
)
else:
if fade_out_enabled:
title_alpha = (
f"if(lt(t\\,{fade_in_start:.3f})\\,0\\,"
f"if(lt(t\\,{visible_end:.3f})\\,1\\,"
f"if(lt(t\\,{fade_out_end:.3f})\\,({fade_out_end:.3f}-t)/{INTRO_TITLE_FADE_LENGTH:.3f}\\,0)))"
)
else:
title_alpha = (
f"if(lt(t\\,{fade_in_start:.3f})\\,0\\,"
f"if(lt(t\\,{visible_end:.3f})\\,1\\,0))"
)
title_enable_end = fade_out_end if fade_out_enabled else visible_end
title_enable = f"enable='between(t,{fade_in_start:.3f},{title_enable_end:.3f})'"
if subtitle:
title_y = f"(h-text_h)/2-{title_font_size // 2}"
filters.append(