ASS v5.0 - TheOneric/libass GitHub Wiki

ASS v5.0 is an elusive idea floating around for quite a while. It is expected to be triggered by a version header, and would change parsing to allow new tags to be used, and old VSFilter-emulation quirks to be skipped. The current draft of the specification is available on this wiki.

Planned features

  • Completely spec out everything before implementation
  • Native, fast, easy, flexible gradient support
    • Simple linear (with direction specifier) and radial (with center specifier) with multiple stops, similar to CSS3
  • Remove all VSFilter-compat hacks
  • Corner pinning
  • Vertical spacing tag (\fspy)
  • Escape character using backslashes (e.g. \\N, \{)
    • Unicode escaping, e.g. \u2764 to encode ❤
  • Well-defined semantics for \fs and font hinting
    • \fs defines font height, not line height
  • Well-defined semantics for colors
  • Well-defined and sane behavior and ordering of margins, rotations, shears etc.
  • No \be
  • Sane \blur
  • Clip mask blur
  • Sane layering (sane from a user's perspective; not merely easy to implement)
  • Differentiate between sign typesetting and normal subtitles (beware: animated normal subtitles)
    • color matching: signs should match video, subtitles screen?
    • font hinting: probably no hinting for signs, subtitles possibly hinted?
    • rescaling: ideally, signs rendered and blended at video resolution before the video is rescaled; subtitles rendered and blended at display (or indeed any) resolution
  • Clean up the karaoke tags?
  • Easy text replacement syntax (no need for multiple tracks to en/disable honorifics)
  • Bitmap graphics support
    • Use text as a mask over a bitmap texture
  • Styles overhaul: Reduce to 2 fields: Style name and overrides, which are parsed as if in a {} at the start of each line with the style (e.g. Default,\fnCommie Sans)
    • Move Margins to an override tag; allow all 4 sides to have margins, instead of 3
    • Move Layer to an override tag
  • Event overhaul: Remove unnecessary fields that have been moved to tags
    • Remove old Effects
    • Repurpose Effects field as general arbitrary metadata field (ignored by renderer; used by scripts and authoring tools as they like [Aegisub should decide standards for use?])
  • Millisecond precision in timestamps (00:00:00.000)
  • Move \move to \t-ing \pos
  • Provide methods for specifying paths; keyframing
    • Avoid loads and loads of events for moving around a line
    • Animate text along a Drawing-style path?
  • Don't be stupid about scaling
    • Same script works fine on 720p or 1080p files (and beyond!)
  • \a tag (no 1-4) representing the alpha of all 3 bitmaps, applied after compositing
    • \fad will use this
    • This is almost certainly what you want anyway
  • Put text on a path easily
  • All arguments may be enclosed in (parens), rather than only most.
  • Ruby character support (https://en.wikipedia.org/wiki/Ruby_characters)
  • Require UTF-8 as the only valid character encoding
  • Tags to enable and disable OpenType feature flags (ligatures, etc)

Additional Suggestions

  • Add tags for (at least) simple mathematical typesetting, i.e. superscript, subscript, fractions and matrices (only without brackets?). (original suggestion)
  • Allow more flexible text justification; i.e. justify independent from event placement (currently possible only via libass API) and option for "full justification" for which both line starts and ends are aligned. (original suggestion)
  • Movable clip position independent of the clip extent (#703)
  • Add a way to create 3D-letters (original suggestion).
    However, this would be both costly to render and a lot of additional work to add, requiring at least:
    • letter thickness, i.e. extent in z-direction (as an addition: animatable scaling of thickness)
    • letter material (this can have quite a lot of variables; we can probably ignore anisotropic materials, but since letters can be partially transparent we probably can't ignore transmission behaviour)
    • lighting position(s) (& lighting colour?, only isotropic point lights or directed light and emitting surfaces...)
    • (probably better to have) its own event-type separate from regular (2D-surfaces in a 3D-space) dialogue and typesetting events.