Skip to main content

This is a Package for generating and formatting subtitles while focusing on user-friendliness and providing many features.

Project description

SubTextHighlight

SubTextHighlight is a comprehensive Python package for generating, formatting, and styling subtitles. It focuses on user-friendliness while providing high-end visual features for video editing and automation.

GitHub release (latest by date including pre-releases)
GitHub last commit
GitHub issues
GitHub pull requests
GitHub

Below is a clip from 1984, styled using SubTextHighlight as an example:

https://github.com/user-attachments/assets/0a6f01fd-72bb-4dc5-a9e1-9a0d14330490

Table of Contents

This is a table of contents for your project. It helps the reader navigate through the README quickly.

🛠 Requirements

📦 Installation

Install from PYPI or directly from GitHub:

# Via pip
pip install SubTextHighlight

# Via GitHub (Latest)
pip install git+[https://github.com/kalterBebapKacke/SubTextHighlight@main](https://github.com/kalterBebapKacke/SubTextHighlight@main)

🚀 How to Use

This is the script to generate the shown subtitles:

    import SubTextHighlight # import package

    # configure styles and set inputs
    sub_args = SubTextHighlight.sub_args(
        input='./media/plain_video.mp4', # set the input to a video, which will generate the subtitles for me
        output='./media/output_video.mp4', # set the output to a .mp4, so that the subtitles will be burned in
        subtitle_type='separate_on_period', # styling option
        alignment=2,
        fill_sub_times=False,
        # more styling options like size or font
    )
    highlight_args = SubTextHighlight.highlight_args(
        highlight_word_max=0 # only one word will be highlighted
        # Note: The default settings are the same as in sub_args (font, etc), only change what differs as a highlight
        # As the background is used as a highlight, no more settings are needed
    )
    effects_args = SubTextHighlight.effects_args(
        fade=(50,50),
        args_border=SubTextHighlight.args_border() # Just the default settings to use the borders as a highlight
    )

    # generate the subtitles
    SubTextHighlight.Subtitle_Edit(
        sub_args,
        highlight_args,
        effects_args,
    )()

The package uses three main configuration classes to control the output. You initialize these classes and pass them to Subtitle_Edit:

  1. sub_args: Controls general styling, input/output paths, and transcription settings.
  2. highlight_args: Controls the styling of highlighted words.
  3. effects_args: Controls animations, transitions, and advanced border effects.

1. Style Basics (utils.args_styles)

Both sub_args and highlight_args inherit from utils.args_styles. These attributes control the visual appearance of your text.

Font & Text Settings

Attribute Type Default Description
fontname str 'Arial' Font family (must be installed on system).
fontsize float 24 Font size in points.
bold bool True Renders text in bold.
italic bool False Renders text in italics.
underline bool False Renders text with underline.

Color Settings

Accepts pysubs2.Color objects or HEX strings (e.g., 'ff0000').

Attribute Default Description
primarycolor White Main text fill color.
secondarycolor Black Used for karaoke/transitional effects.
backcolor Black Background color for boxed styles.
outlinecolor Black Text outline color.

Layout & Visuals

Attribute Default Description
outline 1 Thickness of text outline (pixels).
shadow 0 Drop shadow offset (pixels).
alignment 5 Numpad positioning (e.g., 2=Bottom, 5=Center).
borderstyle 1 1: Outline only, 3: Opaque box.
spacing 0.75 Line spacing multiplier.

2. Configuration Classes

sub_args

General subtitle parameters.

  • input (str | WhisperResult): Required. Path to file (video/audio/srt) or Whisper result.

  • output (str): Required. Output path (.ass, .mp4, or None to return the pysubs2 SSA_File object).

  • subtitle_type (str):

  • 'one_word_only': One word per subtitle.

  • 'join': Join words based on word_max.

  • 'separate_on_period': Split at the sentence ends.

  • whisper_model (str): Model name (e.g., 'medium.en').

  • whisper_refine (bool): Refine timestamps (English only).


highlight_args

Highlight specific words.

Inherits all style attributes from above. If an attribute is set to None, it defaults to the value set in sub_args.

  • highlight_word_max (int): Number of words to highlight at once (0 = single word).

effects_args

Transitions and borders.

  • fade (tuple[float, float]): (FadeIn, FadeOut) duration in milliseconds.
  • appear (bool): If True, words appear cumulatively rather than replacing each other.
  • args_border (args_border | None): Configuration for advanced border/box rendering.

3. Advanced Borders (args_border)

Use the args_border class to create custom background boxes or border effects. Pass this object to effects_args.

border_conf = SubTextHighlight.args_border(
    offset=6,
    radius=10,
    color="FF0000"
)
effects = SubTextHighlight.effects_args(args_border=border_conf)
Parameter Type Default Description
offset int 6 Padding between text and border edge.
radius int 6 Corner radius for rounded boxes.
transformy int 1 Vertical shift/correction.
height_scaling float 1.2 Multiplier for border height relative to text.
color Color None Border color. Defaults to White if None.
use_borders_as_highlight bool False If True, uses the border style to indicate highlights.
container_run_func func None Custom function for containerized rendering.

💻 Example Usage

1. Burned-in Subtitles with Highlights

import SubTextHighlight

# Define Input/Output
input_file = './media/plain_video.webm'
output_file = './media/edited_video.mp4'

# 1. Configure General Settings
sub_args = SubTextHighlight.sub_args(
    input=input_file,
    output=output_file,
    input_video=input_file,
    subtitle_type='separate_on_period',
    fontname='Arial Rounded MT Bold',
    alignment=2,
    whisper_refine=True
)

# 2. Configure Highlights (Blue text)
highlight_args = SubTextHighlight.highlight_args(
    primarycolor='00AAFF'
)

# 3. Configure Effects (Fade + Custom Border)
border_settings = SubTextHighlight.args_border(
    radius=10, 
    color='000000', 
    height_scaling=1.1
)
effect_args = SubTextHighlight.effects_args(
    fade=(50, 50), 
    args_border=border_settings
)

# 4. Run
sub_edit = SubTextHighlight.Subtitle_Edit(sub_args, highlight_args, effect_args)
sub_edit()

2. Generate .ass File Only

import SubTextHighlight

sub_args = SubTextHighlight.sub_args(
    input='./media/plain_video.webm', 
    output='./media/subtitles.ass',
    subtitle_type='separate_on_period'
)
# ... initialize other args as needed
sub_edit = SubTextHighlight.Subtitle_Edit(sub_args, None, None)
sub_edit()

Feedback & Contributions

We welcome feedback! This project aims to be highly customizable. Please feel free to open issues or submit PRs on GitHub.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

subtexthighlight-2.0.tar.gz (38.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

subtexthighlight-2.0-py3-none-any.whl (39.4 kB view details)

Uploaded Python 3

File details

Details for the file subtexthighlight-2.0.tar.gz.

File metadata

  • Download URL: subtexthighlight-2.0.tar.gz
  • Upload date:
  • Size: 38.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for subtexthighlight-2.0.tar.gz
Algorithm Hash digest
SHA256 3608bbddb0fa572f6a666ee48e125c73f0bfa15c6acd669160f245092f677b1e
MD5 cb6f8133859c756834b33696f3f84da0
BLAKE2b-256 6dfc598bdadb2260bc6a21eef3794d446507ba5e0bbb625c957de05d23610b89

See more details on using hashes here.

File details

Details for the file subtexthighlight-2.0-py3-none-any.whl.

File metadata

  • Download URL: subtexthighlight-2.0-py3-none-any.whl
  • Upload date:
  • Size: 39.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for subtexthighlight-2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fd5254246705e6336f0d3216f8449ecfded016259e6fd9a3b2049a7628f4e701
MD5 175dca48d259bfbf4bfc623866cbd354
BLAKE2b-256 289b474d95cdcbeb21a0b3955e2384df777fadc15c68fce0194c877e03761fab

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page