List of ASS gotchas

This is a list of ASS gotchas: odd and unexpected behaviors of the ASS format.

General gotchas

 * Contrary to most subtitle formats, ASS stores its timestamps as  (centiseconds), not milliseconds.
 * The karaoke timing tags take a duration in centiseconds. All other tags that take durations as arguments take durations in milliseconds.
 * When blurring text with a border in border style 1 (regular borders), the fill is not blurred.
 * For a line with a shadow, when the fill is completely transparent (i.e. ), the fill part of the shadow is not rendered. When the fill alpha has any other value, the fill part in the shadow is rendered as if the fill were fully opaque. The same applies for the border.
 * Breaking a run on a line with will reset the position of the text to the baseline at the start of the next run.
 * Rotating a line with a shadow will offset the rotation origin opposite to the shadow's offset.
 * Tags that use parens do not use proper nesting: a single  closes all "open" tags. For example, in a line such as , the  is not considered part of the transform and will instead supersede the.
 * The camera for perspective rotations is a fixed distance (equal to ) from the plane and does not scale with the script resolution. As a result,  and  do not scale properly when resampling between resolutions. There is no way to configure the distance from the plane. Contrary to popular belief,  is not the source of nor contributes to the issue.
 * Applying both shear tags and  at the same time does not result in a shear.
 * ,, and  disable collision detection for the event they are in. The first three require a valid number of arguments to do so, but a  will always disable collision detection even without any arguments.

libass differences
This is a list of differences between VSFilter and libass.


 * Borders are applied before perspective rotations in libass, but after in VSFilter. This can result in larger borders appearing in VSFilter than in libass, or borders appearing for a 90° rotation when there would be nothing rendered in libass.

Extensions
libass has implemented a number of extensions not present in VSFilter.


 * and  insert literal braces instead of starting or ending an override block.