File size: 1,082 Bytes
9459cd0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
"""
Subtitle Engine. v1 burns in SRT/ASS via ffmpeg's subtitles filter, styled
per the active template. Animated word-highlight/karaoke is a v2 item that
will require switching burn-in to per-frame drawtext or ASS \\k tags.
"""
import os

# style presets keyed by name; templates reference these by `subtitle.style`
STYLE_PRESETS = {
    "default": "FontName=Noto Sans,FontSize=20,PrimaryColour=&HFFFFFF&,OutlineColour=&H000000&,BorderStyle=1,Outline=2",
    "financial": "FontName=Montserrat,FontSize=22,PrimaryColour=&H00D7FF&,OutlineColour=&H000000&,BorderStyle=1,Outline=2,Bold=1",
}


def build_subtitle_filter(subtitle_path: str, style: str = "default") -> str:
    force_style = STYLE_PRESETS.get(style, STYLE_PRESETS["default"])
    ext = os.path.splitext(subtitle_path)[1].lower()
    # ffmpeg's `subtitles` filter handles srt/ass/vtt uniformly; path must be
    # escaped for the filter graph (colons and backslashes are special).
    escaped_path = subtitle_path.replace("\\", "/").replace(":", "\\:")
    return f"subtitles='{escaped_path}':force_style='{force_style}'"