Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Substation Alpha (SSA/ASS) output is not fully compliant with format specification

Open
#2,310 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@alaotach is already working on this.

Since Aug 11, 2026.

  • #2316 by @alaotach — open

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
58/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
c

Research direction

The issue names no source file or test. Start by locating the C code that emits Substation Alpha/ASS Dialogue lines, then compare its timing and inline-format output with the examples; done when hours and centiseconds are fixed-width and formatting uses SSA tags without unnecessary closing tags.

Written by the indexing model from the issue text.

Description

Substation Alpha output produced by CCExtractor is correctly interpreted by most playback software, but is not technically compliant with the format specification. Here is example output produced from my previously uploaded DresdenTest.ts:

Dialogue: 0,00:00:08.90,00:00:12.07,Default,,0000,0000,0000,,{\an7\pos(67,228)}   - WHAT IS IT?                \N   - THIS WAS YOUR MOTHER'S.    
Dialogue: 0,00:00:12.7,00:00:14.29,Default,,0000,0000,0000,,{\an7\pos(154,244)}           <i> GO AHEAD, OPEN IT.</i>  

The first issue is with the timing format. Substation Alpha timing format uses a fixed number of digits for all timings: two for all units except the hours, which are limited to one digit. All of the example lines use two digits for the hours rather than one. Additionally, the second line does not add the leading zero to the decimal for the start time, causing it to incorrectly be presented as starting at 12.70 seconds rather than 12.07 seconds. The correct format for the timings would be as follows:

Dialogue: 0,0:00:08.90,0:00:12.07,Default,,0000,0000,0000,,{\an7\pos(67,228)}   - WHAT IS IT?                \N   - THIS WAS YOUR MOTHER'S.    
Dialogue: 0,0:00:12.07,0:00:14.29,Default,,0000,0000,0000,,{\an7\pos(154,244)}           <i> GO AHEAD, OPEN IT.</i>  

Second, Substation Alpha does not use html tags for format changes, but rather its own formatting tags which can be applied mid-text like html, but unlike html do not need to be followed by a corresponding close tag if the format persists to the end of the subtitle since line formatting is reset to default with each new subtitle. Again, here is the current output produced from DresdenTest.ts:

Dialogue: 0,00:00:01.45,00:00:03.40,Default,,0000,0000,0000,,{\an7\pos(125,244)}        <i> ( opens chest )</i>        
Dialogue: 0,00:00:08.90,00:00:12.07,Default,,0000,0000,0000,,{\an7\pos(67,228)}   - WHAT IS IT?                \N   - THIS WAS YOUR MOTHER'S.    
Dialogue: 0,00:00:12.7,00:00:14.29,Default,,0000,0000,0000,,{\an7\pos(154,244)}           <i> GO AHEAD, OPEN IT.</i>  
Dialogue: 0,00:00:23.92,00:00:25.42,Default,,0000,0000,0000,,{\an7\pos(106,244)}      <i> THAT'S A SHIELD BRACELET.</i>
Dialogue: 0,00:00:25.42,00:00:26.40,Default,,0000,0000,0000,,{\an7\pos(163,228)}            <i> I NEVER REALLY KNEW</i>\N            <i> HOW IT WORKED,</i>     

To match Substation Alpha specification (including the timing issue mentioned above) the output should look as follows:

Dialogue: 0,0:00:01.45,0:00:03.40,Default,,0000,0000,0000,,{\an7\pos(125,244)}        {\i1} ( opens chest )        
Dialogue: 0,0:00:08.90,0:00:12.07,Default,,0000,0000,0000,,{\an7\pos(67,228)}   - WHAT IS IT?                \N   - THIS WAS YOUR MOTHER'S.    
Dialogue: 0,0:00:12.07,0:00:14.29,Default,,0000,0000,0000,,{\an7\pos(154,244)}           {\i1} GO AHEAD, OPEN IT.  
Dialogue: 0,0:00:23.92,0:00:25.42,Default,,0000,0000,0000,,{\an7\pos(106,244)}      {\i1} THAT'S A SHIELD BRACELET.
Dialogue: 0,0:00:25.42,0:00:26.40,Default,,0000,0000,0000,,{\an7\pos(163,228)}            {\i1} I NEVER REALLY KNEW{\i0}\N            {\i1} HOW IT WORKED,     
Dominant language
C
Stars
901
Forks
592
Avg merge
7d 23h
Merged PRs (30d)
11

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from CCExtractor/ccextractor

All issues in CCExtractor/ccextractor

Similar issues

More C issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.