Tools Menu (t) | File Menu (f) | Keyboard Shortcuts (s) | in Japanese (日本語) (j)

See http://mion.faireal.net/a3r/ (q) for the most up-to-date information.

# a3r (ASS_Help3r) for Windows 7/XP (maybe)/2000 (possibly)/8&10 0.1.9.4: October 11, 2021

An open-source helper tool for timing and typesetting in ASS (Advanced Sub Station Alpha).

Get a3r-0.1.9.3-20210320-DLLs-included.7z. VSFilter.dll and ffms2.dll are included (ffms2 was taken from here: ffms2-2.18-748; an old version is here). You can, however, use your favorite version(s) of VSFilter and/or ffms2. If exist, they are loaded from the same directory where ASS_Help3r.exe exists. If they don’t exist there, they may be loaded from a different place. Check Help | About a3r: VSFilter Path shows the location of VSFilter currently used, and a3r tries to load ffms2.dll from the same directory where that VSFilter.dll exists. If you are on Windows XP, you may have to replace ffms2.dll in the archive with ffms2.dll in ffms2_for_win_xp.7z.

To use the newest version, replace (overwrite) ASS_Help3r.exe with the one from the newest a3r-0.1.9.3-yyyymmdd-exe-only.7z (if exists), where yyyymmdd = year/month/date.

One way to typeset is using software like Sub Station Alpha, Sabbu, and Aegisub, or retouching software like Photoshop. But some typesetters traditionally prefer using a plain text editor to directly edit a script. Probably every typesetter does that at least sometimes. a3r is a small utility designed to help you when you take this approach. It was originally my own private tool, and basically it still is. I always use it with EmEditor plus syntax highlighting. This tool doesn't really help unless you are already comfortable with editing ASS directly and already have a basic idea. For example, a3r helps you do subtitle‐lip‐sync, but only if you already know how to do subtitle‐lip‐sync.

Though this tool is small and not really great, it can do several things that other tools can't. For example, checking the number of characters per second to make sure each subtitle text isn't too long for its duration, should be trivial, and very important too. Yet it seems that other typesetters are not very interested in doing this. To make sure that each character in each Dialogue is supported by the specified font is obviously important, but again, I don't know any other tools that can do this basic error checking properly. In earlier days, there were no other tools that could generate t-clip-based effects, such as smooth outline karaoke or vertical karaoke, either.

Warning: VSFilter vs. xy-VSFilter Incompatibility: VSFilter from MPC-HC [such as VSFilter 1.7.5 (537b5a3) (MPC-HC Team)] and xy-VSFilter [such as VSFilter 3.2.0.806 (xy-VSFilter Team)] are not always compatible. For example, the following code may behave differently depending on which VSFilter you use:
{\t(100,200,\fscy120\frx5\shad2.5)}{\t(300,400,\fscy100\frx0\shad1)}{\p4\pbo-14}***{\p0}{\r}
where *** is some path to draw a glyph. (June 3, 2021)

## History

• 2019-05-07 v0.1.8.3: See History.txt
• 2019-06-26 v0.1.8.4 (beta): Better handling of non-AVI video files via FFVideoSource. a3r tries to load ffms2.dll from the same directory from which VSFilter.dll is loaded (e.g. the same directory where ASS_Help3r.exe exists). If that is impossible, ffms2.dll is not loaded explicitly (but it may be loaded by default if existing in the plugins+ folder of AviSynth+). A known problem: to load an audio-less (video-only) file, one needs to select Audio | No Audio. (Fixed in v2) See History.txt
• 2019-06-29 v0.1.8.5 (beta): Font Viewer: try to locate (and get info from) font files, even if they are installed in the user directory. (It seems that starting with Windows 10 Version 1809 (~October 2018), one can install fonts in the user directory. Older versions of a3r may not be able to locate such font files.)
• 2019-07-28 v0.1.8.6 (beta): One can import a keyframe list from Aegi.
• 2019-08-15 v0.1.8.7 (beta): [FIX] Time zone- (esp. DST-) related subtle bugs. [NEW] Support an arbitrary external editor: %s, %d, %u in [Editor] Options in INI are replaced by ASS file name/Line #/Column # respectively. A random example follows. For keyboard shortcuts, check Edit > Edit with Extermanl Editor.
[Editor]
Path="X:\path to\your_editor.exe"
Options=%s:%d:%u
• 2019-10-01 v0.1.8.8 (beta): Minor fixes
• 2019-12-19 v0.1.8.8 (beta2): If "keyframe.txt" is DnD'ed, it is imported as the scene-change frame list.
• 2019-12-24 v0.1.8.8 (beta3): [FIX] Crash in some situations when a scene-change frame list is imported.
• 2020-01-21 v0.1.8.9 (beta): [FIX] TZ names PST/PDT were flipped as PDT/PST.
• 2020-03-19 v0.1.8.9: [FIX] Some memory bugs and minor misc bugs. [NEW] Simple Timer: Options | Waveform Size. [NEW] Option to save ASS as a plain-text UTF-8 file, where /italic words/ are marked with slashes.
• 2020-05-11 v0.1.9.0: [FIX] SubOverrun: End time was shown as Start time in Section 4. [FIX] FrameList: memory bugs in rare cases. [NEW] ShiftTime: "Save as UTF-8" option. [FIX] ac3.avi could be audio-less even with a proper ACM codec installed. [NEW] Hotkey F11 = temporary force-enable the magnifying glass.
• 2020-08-14 v0.1.9.1: [FIX] “Shift as”: Insufficient buffer size in some cases. [NEW] Can demux ASS from MKV by itself (w/o using mkvextract).
• 2021-01-09 v0.1.9.2: [NEW] Can Demux ASS #1...#20 from MKV. [MOD] Copy in Chat Format: use slashes for italic, instead of asterisks. [NEW] Parse MKV: recognize LanguageIETF.
• 2021-03-20 v0.1.9.3: [FIX] parse_mkv: treat CRC right, if exists. [MOD] Minor tweaks.

## Requirements

• Windows XP or 2000 (SP4 is recommended if you use Windows 2000): perhaps Windows 7 (or later) may be better.
• AviSynth: 2.5.6, 2.5.7, 2.5.8, 2.6.0, and 2.6.1 Alpha 1 are tested. (NOTE: WMV may not work with AviSynth 2.6.0+.) — AviSynth+ generally works better. To open 10-bit video files, you may need AviSynth+.
• VSFilter.dll (included in the package)
• Microsoft Visual C++ 2008 Service Pack 1 Redistributable (vcredist_x86.exe). Maybe needed; maybe not.
• VfW codecs: Xvid codec to decode Xvid, for example.
• A monitor that supports 24-bit or more color depth. 1152x864 or larger size is recommended, but a slightly smaller one is usable too.
• A fast CPU that supports the high-resolution performance counter (Pentium or later).

## Basic Interface

Basic interface is compatible with VirtualDub (VD) and—in some aspects—with Media Player Classic (MPC), altough in the source code level a3r is not related to those brilliant programs. Some shortcut keys, especially used in the Simple Timer tool, are also compatible with Sub Station Alpha v4.08.

When you open ASS and AVI, the video stream softsubbed by the current script is shown in the left pane. When you only open ASS without loading AVI, a blank, 24000/1001-fps clip is used as a video stream. When you open AVI without loading ASS, a3r simply shows the video stream as it is.

When a3r generates a new ASS for special effects such as Striped Colors, Multistate Karaoke, the right pane is used to preview that results. The preview is useful to tweak the parameters of the effect interactively. Otherwise, the left and the right show the same image.

In almost all editboxes, you don't need to hit [Ctrl]+[C] to copy a text. Make a selection, and the selected text is already sent to Clipboard.

The statusbar shows the current cursor position as {\pos(x,y)}, and the pixel color under the cursor as {\1c&Hbbggrr}. The origin is the left upper corner of the image in the left pane. To get the color code for a certain pixel, just click on it, and the code is sent to Clipboard. [Alt]+click will send the current {\pos(x,y)} to Clipboard. The following table summarizes what you can do with your mouse.

What You Do What You Get Note
Click (in Default Mode) &Hbbggrr The two magnified images shown below help you click on the exact pixel. One shows the 50x50 area around the cursor, the other shows the current pixel under the cursor and 8 surrounding pixels.
Click (in XY Mode)  x  Or [Ctrl]+[Alt]+[Shift]+Click in every mode.
RightClick (in XY Mode)  y  Or [Ctrl]+[Alt]+[Shift]+RightClick in every mode.
[Ctrl]+Click Average Color as &Hbbggrr Click on several sample points while holding down [Ctrl], and the average is calculated when you release the [Ctrl] key.
[Shift]+Click (in Def. Mode) Pixel Color as decimal (signed 32-bit integer) A decimal color code is usually not necessary in Advanced SSA, but you may need it for compatibility with the original V4 Styles.
[Ctrl]+[Shift]+Click Average Color as decimal Ditto.
[Shift]+Click (in non-Def. Mode) &Hbbggrr Like simple clicking in the default mode.
[Alt]+Click {\pos(x,y)} Correct PlayResX/Y are assumed. (The "Subpixel PlayResX/Y" technique is not supported.)
[Shift]+[Tab]+Click
OR
[Alt]+[Shift]+Click (*)
(3 times or more)
{\an7}{\p1}m x1 y1 l x2 y2 x3 y3 ...{\p0} Drawing a polygon as the clipping area with the points clicked. The polygon is previewed directly on the picture, and undoable by [Ctrl]+[Z].
(*) NOTE: Windows uses [Left Alt]+[Shift] to switch between input languages, if you have 2 or more keyboard layouts enabled. In that case, you may want to use [Shift]+[Tab] instead of [Left Alt]+[Shift] to prevent input lanaguage change.
[Shift]+[Tab]+Click
OR
[Alt]+[Shift]+Click (*)
(2 times)
{\move(x1,y1,x2,y2)} Generated when you release the [Ctrl]+[Alt] keys.
(*) NOTE: Windows uses [Left Alt]+[Shift] to switch between input languages if you have 2 or more languages enabled. In that case, you may want to use [Shift]+[Tab] instead of [Left Alt]+[Shift] to prevent input lanaguage change.
[Ctrl]+[Tab]+Click
OR
[Ctrl]+[Alt]+Click (**)
{\an7}{\clip(m x1 y1 l x2 y2 x3 y3 ...)} Similar as [Shift]+[Alt]+Click but the result is a polygon itself, not the clipping area.
(**) NOTE: Windows uses [Ctrl]+[Shift] to switch between keyboard layouts if you have 2 or more keyboard layouts enabled under one installed language. In that case, you may want to use [Ctrl]+[Tab] instead of [Ctrl]+[Alt] to prevent input lanaguage change.
[Tab]+Click x y May be useful when tweaking a parameter in {\p1}...{\p0} or {\clip(...)}
MouseWheel Up/Down Go to the previous/next Dialogue. If ASS is not loaded, go to the previous/next frame. MouseWheel behaves differently depending on whether ASS is loaded or not. If loaded, same as [PageUp]/[PageDown]; else same as [←]/[→].
[Shift]+MouseWheel Go to the previous/next Key Dialogue. If ASS is not loaded, go to the previous/next keyframe. [Shift]+MouseWheel behaves differently depending on whether ASS is loaded or not. If loaded, same as [Shift]+[PageUp]/[PageDown]; else same as [Shift]+[←]/[→].
[5]/[Alt]/[Tab]+MouseWheel Move by 5/50/500 frames. Same as [5]/[Alt]/[Tab]+[←]/[→], not depending on whether ASS is loaded or not.
MiddleClick {\pos(x,y)} Same as [Alt]+Click.

Shortcuts Meaning Note
[←]/[→] Go to the previous/next frame. [←] = The left arrow key. [→] = The right arrow key. Compatible with VirtualDub, AviUtl, and many other video-related programs.
[Shift]+[←]/[→] Go to the prev/next keyframe. Shortcuts compatible with VirtualDub. If the video is keyframe-only, or keyframes are not recognized, you simply get the prev/next frame.
[Ctrl]+[Shift]+[←]/[→] Go to the prev/next scene-change frame. Valid only when a scene-change frame list has been imported.
[Ctrl]+[←]/[→] Go to the first/last frame. Compatible with VirtualDub.
[Tab]+[←]/[→] 500 frames back/forward.
[Alt]+[←]/[→] 50 frames back/forward. Compatible with VirtualDub.
[5]+[←]/[→] 5 frames back/forward. Sometimes useful when checking heavy karaoke effects. [Num5] doesn't work for [5] here.
[Alt]+[Num+]/[Num-] 10 minutes back/forward.
[Num+]/[Num-] 1 minutes back/forward.
[Shift]+[Num+]/[Num-] 30 seconds back/forward.
[Alt]+[Shift]+[←]/[→] 0.8 seconds back/forward. Going to the nearest frame that is at least 0.8 seconds apart from the current frame. In 24000/1001 fps, this means 20 frames or 0.834 seconds.

Shortcuts Meaning Note
[PageUp]/[PageDown] The previous/next Dialogue in line-number order. Seek the Dialogue according to the line number in the file. For example, if you have Dialogues in line 20 and 21, and the current Dialogue is the one from line 20, the next Dialogue by [PageDown] is the one from line 21, regardless of their chronological order (start time/end time). You can also navigate in Dialogues chronologically using the up and down arrow keys ([↑]/[↓]).
[Shift]+[PageUp]/[PageDown] The key-Dialogue of the previous/next cluster in line-number order. A key-Dialogue (or a key-subtitle) is a Dialogue whose start time is different from the start time of the previous Dialogue in file, or whose end time is different from the end time of the previous Dialogue in file, or both. For various effects, you use a subtitle cluster—2 or more Dialogues, consecutive in line-number order, sharing the exactly same start time and end time. Only the first line in a subtitle cluster is a key-Dialogue. If a Dialogue is not in a cluster of 2 or more Dialogues (i.e. if it's an "ordinary" subtitle), [Shift]+[PageUp]/[PageDown] is same as [PageUp]/[PageDown]. You can think of an ordinary subtitle as a cluster of one member.
[Tab]+[PageUp]/[PageDown] 100 Dialogeus back/forward. In line-number order.
[Alt]+[PageUp]/[PageDown] 10 Dialogeus back/forward. In line-number order.
[↑]/[↓] The previous/next Dialogue, chronologically. Dialogues are sorted by start time, in increasing order, and the previous/next Dialogue is looked for in such a way that the start time of the destination Dialogue t is less/greater than or equal to the start time of the current Dialogue t0, and there is no Dialogue whose start time is truely between t0 and t (basically, this means that you get the previous/next Dialogue event, and "equal" is included when we say previous/next). If there are more than one Dialogues sharing the same start time t, the line-number order is used as the secondary sorting.
[Shift]+[↑]/[↓] The truely previous/next Dialogue, chronologically. Dialogues are sorted by start time, in increasing order, and the previous/next Dialogue is looked for in such a way that the start time of the destination Dialogue t is truely less/greater than the start time of the current Dialogue t0, and there is no Dialogue whose start time is truely between t0 and t (basically, this means that you get the previous/next Dialogue event, and "equal" is not included when we say previous/next). The Dialogues sharing the same start time t0, if any, will be skipped. If there are more than one Dialogues sharing the same start time t, the key-sub is selected, that is the first sub in line order in the cluster.
[Num0] Go to the start frame of the current Dialogue. The first video frame on which you see the current Dialogue. The video frame timestamp is greater than or equal to the Dialogue start time.
[Num.] Go to the last frame of the current Dialogue. The last video frame on which you see the current Dialogue. This is just before the end frame. The video frame timestamp is less than the Dialogue end time. [Num.] = the period (decimal point) key in the numeric keypad.
[Num1] Go to the end frame of the current Dialogue. The video frame next to the last frame of the current Dialogue. It's the first video frame after the current end time, on which you don't see the current Dialogue text anymore. The video frame timestamp is greater than or equal to the Dialogue end time. (NOTE: VSFilter is buggy if the end time is exactly equal to a video frame timing.)
[Ctrl]+[Num.] Go to the last frame of the previous Dialogue. Previous Dialogue in line-number order.

### The "Timestamp" Editbox

Text example:
Frame 10000 (0:06:57.083 333 333)[ ][ ]( 29.5%) 24000/1001 fps > 0:06:57.08 (673.333,715.042) +282 -18

Field Example Note
Frame number Frame 10000 The number is 0-based. You can copy (i.e. send to the clipboard) the number by [Ctrl]+[F3].
Video timing 0:06:57.083 333 333 The part less than 1 nanosecond is rounded. If you ever need a more accurate value, hit [Alt]+[F3], and you have 50 digits after the decimal point.
Frame type [K] [K] means the frame is a keyframe. [F] also means the frame is a keyframe, but it is likely to be a forced keyframe, inserted even though it is not a scene change. [ ] means the frame is not a keyframe. Typically a forced keyframe occurs once in ten seoncds if there are no scene changes at all.
Percentage 29.5% The position of the frame in the video. 0% means the first frame, and 100% means the last frame.
FPS 24000/1001 fps Don't confuse 24000/1001 (23.97602...), 2997/125 (23.976), and 10000000/417083 (23.97604...): the difference is small, but could be critical in tyesetting. If you are not strict about them, you will easily get a subtitle whose start or end timing is off by one frame.
SSA style timestamp 0:06:57.08 To copy the current timestamp, hit [F3], or hit [G] (the shortcut keys you may use most frequently in this helper tool). The timestamp is normalized in such a way that (1) the largest timestamp is selected among the synonymous SSA timestamps, unless the margin is less than 0.5 milliseconds, when the second largest timestamp is used. As an exception, the SSA timestamp pointing to the frame 0 is always 0:00:00.00, the margin being 0.
t-values 673.333,715.042 Time arguments pointing to the start and end of the current video frame, in relation to the current Dialogue. The unit is millisecond. They are arguments you use in ASS commands such as {\t(t1,t2,...)}. Note that t-values will change if you select another synonymous SSA timestamp. Changing one synonymous SSA timestamp to another doesn't change the subtitle-video-frame timing, but it does change the nuance of ASS effects controlled by t-values, such as fade-in/out. Only shown when an ASS file is loaded.
Keyframe Distances +282 -18 The example means, the current frame is 282 frames after the previous keyframe and 18 frames before the next keyframe. If the current frame is a keyframe, it is reported as +0 -0.

The frame number is 0-based, which actually shows the number of elapsed frames from the beginning. The frame timestamp is shown in nanoseconds (less than 1 ns is rounded, not truncated). Also shown is an SSA/ASS-style timestamp (h:mm:ss.cc) for each video frame. The second timestamp is always a little smaller than the first one (Actual Timing), except when the first timestamp is ≦ 0.1 seconds, hence placed after the symbol >. This SSA/ASS timestamp is "normalized" in the recommended way. For more discussion, see Normalizing.

#### t value

0.0.9.11+ The t value is shown for each video frame, if both Video and ASS are loaded. This is the time in milliseconds relative to the ASS (Logical) Start Time of the Dialogue. For instance, the Dialogue that logically starts at 0:00:01.75 has t=335 (335.417) on Frame 50 at 24000/1001 fps (0:00:02.085 416 667):
2.085416667 - 1.75 = 0.335416667 sec = 335.416667 ms

This parameter is informative when you need to accurately control ASS tags such as {\t}, {\fad}, and especially {\move}. A command like {\move(0,1000,...)} usually doesn't result in a smooth movement, because the correct t value is generally not 0 on the first frame. In other words, this 0 means 0 relative to the Logical Start Time (Subtitle Start Time) s, and not to the Actual Start Time v, which is the 'next' (i.e. the smallest) Video Frame Timing greater than or equal to s (*). If, for instance, moving should start at t=5.333 and end at t=964.625, the accurate command would be {\move(6,965,... )}. When the moving is very rapid (e.g. 5000 pixels / second), the sub could logically move several pixels in 1 ms or an even shorter period, so if you assumed the start t to be 0 while it was actually 5.333, the sub would not be seen in its original position when actually observed on the first frame, but would be a little slid, and then suddenly would begin moving very fast starting from the second frame. Note that t=0 does not mean the moment when the subtitle first appears unless v-s happens to be 0. For the same reason, the start t should be rounded up, so that the moving would never take place before the actual timing.

The t value shown is relative to the Logical Start Time written in your ASS, which may not be normalized. After you set parameters for millisecond-sensitive commands, try not to re-select synonymous ASS timestamps. For instance, 0:00:01.74 might be synonymous with 0:00:01.75 as far as frame timing is concerned, yet changing 1.75 to 1.74 would increase the related t values by 10. You may want to normalize timestamps before working on details.

0.0.9.13+: The t2 value is also shown: t2 is the next video frame's t value, i.e. the t value at the very end of the current frame.

(*) NOTE: In theory, v should be able to equal to s. That is, the subtitle start time should be inclusive. Which is indeed true for Textsub.vdf and Subtitler.vdf, but unfortunately not generally true for VSFilter.dll. To avoid this confusion, subtract 1 unit (10 ms) from s if v-s is very small and s is not 0. This "anti-overnormalize threshold" is called "Margin" in a3r's Shift menu, the default value being 0.5 ms.

### For Keyboard Users

You can make a selection in an editbox by [Shift] and navigation keys. When [Shift] is released, the selection is sent to Clipboard. To change the keyboard focus on the main window, hit the / key. The slash key is one-way ([Shift] + / doesn't work).

0.0.9.57+: Basically [Tab] works as if in a dialogbox too.

0.0.7.3+: You can use [Alt] + [Num 1~9] to move the cursor without a mouse. This is handy to set the cursor position delicately. [Q] works like a mouse click ( [Q] = Pick Color, [Alt] + [Q] = Pick Pos, etc.).

0.0.7.5+: Drawing by Keyboard is also possible. For instance, [Alt] + [Q] + [Num] will draw a rectangle and copy it as {\clip}; if [Shift] is pressed when [Q] is released, the rectangle will be copied as {\p1}...{\p0}.

0.0.9.55+: If you hit the [Delete] key when the main window has the keyboard focus, the keyboard focus moves to the main editbox. If you hit the [Delete] key when the main editbox or the timestamp editbox has the keyboard focus, the keyboard focus moves back to the main window.

#### "[Ins] then [A]"-style Hotkeys

0.0.7.22+: If you hit the [Insert] key, some of the succeeding keystrokes are interpreted as special kind of hotkeys. For instance, [Ins] then [O] will send a 'LATIN SMALL LETTER O WITH MACRON' (U+014D), ō, as Unicode text, to Clipboard. Similary, [Ins] then [Shift]+[O] will send a 'LATIN CAPITAL LETTER O WITH MACRON' (U+014C), Ō. These hotkeys are the same with the ones listed in the table in the Dialogbox popped up by [F4]. The other (non-assigned) keystrokes are simply ignored.

The "[Ins] then [A]"-type hotkeys are only valid for one second after [Ins] is released, and only once. If one second passes after [Ins] is released, the keystrokes are no longer interpreted specially. If, for instance, you hit [Ins], [O], [U] in this order, "[Ins] then [O]" would be interpreted and "[Ins] then [U]" wouldn't.

Note: You don't need to keep the [Ins] key pressed down while using these hotkeys (such as [O] or [Shift]+[O]). Press [Ins], release [Ins], then hit [O] or [Shift]+[O] will suffice, as long as it is within one second after [Ins] is released.

### General Note

When a3r generates ASS commands, etc., the result may include debug information. This is because the current version is an early beta under testing. You can safely remove them.

### File

Opens a script (ASS/SSA) or loads an AVI file. The script can be practically in any encoding, but if the encoding is not autodetected, you'll be asked about it. If that is bothering, resave your script in Unicode (if UTF-8 put the BOM). Unknown encoding is never defaulted to the system's default Code Page, since a typesetter should sometimes handle files in different encodings (Win Latin, Shift_JIS, etc.) at the same time. UTF-8 without BOM is not autodetected either (theoretically impossible).

Shift/Normalize As... does frame-accurate (or subframe-accurate, if desired) time shifting for a specified range, and/or normalize the timestamps. To just normalize the timestamps, you can shift every Dialogue by 0 frames.

View File Info might give you some interesting information, such as dwStart, LAME tag, interleaving structure, and AVI JUNK.

Preview replays the video as softsubbing it by VSFilter. It will try to respect or ignore the LAME tag, if it exists, as you wish.

NOTE: LAME Tag handling is not tested well. Maybe wrong.

VBR MP3 and AC3 audio are supported only in newer versions (0.0.7.24+). For the details, see Supported A/V Format. The preview algorithm has been changed since 0.0.7.25. The new one is more decent, but not well-tested, and may be unstable.

0.0.7.14+: Preview always starts from the current frame. If the current frame is before the Selection-End, then the preview will stop when it reaches the Selection-End; if the current frame is on or after the Selection-End, or no selection is made, preview doesn't stop until it reaches the last frame, or you pause it. To start from the Selection-Start, you need to hit [ to jump there first.

Reload or [F5] reopens the currently loaded file(s), refreshing the subtitle image.

### Tools Overview

Fancy Note: Generates a stylish, animated note. The background is half-transparent rectangle with rounded corners.

Color Gradient: Generates color gradients. Vertical or horizontal. Not only for a colorful effect, but for giving a subtle tint when the color is too pure, somewhat like \be1.

Grad4v2: Tries to remove the foreground image, script-wise, faking up the background by interpolating the colors, using the pixels on the given four edges.

Striped Colors: Like Color Gradient, but the cells get two colors alternatively. The boundaries of areas can be diagonal too.

Generate Token/Line: Converts timed lines into untimed tokens (as a plain text file), as the first step of karaoke'ing. Simple, but a fast way to accurate karaoke.

Token/Line to Kara Lines: Make a basic karaoke script from timed tokens and timed lines.

Decorate Karaoke t/r: There are two totally different approaches in karaoke effects: temporal and spatial. t/r is temporal. You can specify things like "do this when activated" "do this when 100 milliseconds elapse since the event," and a3r automatically generates \t ... \r for each token. If you are a karaoke'er, probably you don't need any explanation.

Multistate Karaoke: Generates spatial karaoke effects (e.g. "do this 100 pixels left of the karaoke cusp" ). K-karaoke will be rewritten with \t and \clip. For this one, some explanation might be needed. Click the link for details.

Scan: Checks the \pos(x,y) and \clip(x1,y1,x2,y2) parameters for each glyph. a3r can also rewrite a Dialogue using one Dialogue for each glyph, as a starting point of per-glyph effects.

Special Characters: From this editbox, you can quickly copy-paste a special character commonly needed when typesetting. Some of commonly used ASS command combinations are also shown.

Detect Subtitle Overruns: Reports about possible subtitle overruns/underruns.

Verify Fonts in [Styles]: reports if a font specified as the [V4+ Styles] "Fontname" does not exist in your system. Also it detects problems about the "Encoding" parameters.

Font Viewer: Simple font viewer specifically designed for SSA/ASS typesetters. It reports Fontname and Encoding for SSA/ASS, the font's OS/2 table version. For a CJK font, both the native Unicode name and the ANSI name are reported.

Font Properties: directly reads the font file, and reports information from the 'name' table and the 'OS/2' table.

Run Calc.exe / [c]: Just launches Calc.exe.

Fix MP3: Fixes an MP3 file that doesn't begin by a complete MP3 frame.

### Edit

• Copy On-Screen Image / [Ctrl]+[C] sends the current image (frame) to Clipboard. If you draw a rectangle on the image, that is copied too.
• Copy Input Image / [Ctrl]+[1] sends the image in the left pane to Clipboard. The rectangle you draw on the image is not copied.
• Copy Output Image / [Ctrl]+[2] sends the image in the right pane to Clipboard.
• Paste Image / [Ctrl]+[V] pastes the image in Clipboard onto this application. Typically used when you'd like to use the color picker. If another image or video is currently loaded, that will be automatically unloaded. If no image is in Clipboard, nothing happens.
• Copy Current SSA Timestamp / [F3] (0.0.7.3+): Copy to Clipboard the normalized SSA Timestamp (H:MM:SS.cc, in centiseconds) for the current video frame.
• Copy mm:ss / [Shift]+[F3] (0.0.7.20+): Similar to Copy Current SSA Timestamp, but as H:MM:SS. The subsecond part is truncated. H: is omitted if H=0.
• Copy Frame Time / [Alt]+[F3] (0.0.7.20+): Copy the timestamp of the current video frame, in milliseconds, to the Clipboard. Time less than 1 ms is rounded off (half-adjusted).
0.0.9.5+ The timestamp copied is in nanoseconds.
• Copy Time for OGM Chapter / [Shift] + [Ctrl] + [F3] (0.0.9.5+): Copy an OGM-chapter-style timestamp (HH:MM:SS.mmm, with millisecond accuracy) to point the current video frame to the Clipbard. A timestamp in this format can be used in a chapter for OGM or MKV. (The same timestamap format is also used by DVD Decrypter as "Chapter Information - OGG.txt".) The sub-millisecond part is truncated if non-zero. If the sub-millisecond part is exactly equal to zero, 1 ms is subtracted from the timestamp, making sure that the timestamp copied is always truly smaller ( < not ) than the actual value.

0.0.7.3+: When copy/pasting image, CF_DIB is the first choice. Older versions use CF_BITMAP only, and may not be able to copy-paste to/from some tools.

### Go

• [PageUp] and [PageDown] let you navigate between the subtitles, according to the line order in the script (not timeline).
• [<-] and [->] let you navigate between the video frames. Basically, everything is VirtualDub-like, i.e. [Alt] = ±50 frames, [Shift] = Keyframes, [Ctrl] = First/Last; additionally, you can use [Tab] + [->] and [Tab] + [<-] to navigate by 500 frames. You can also use [5] + [->] and [5] + [<-] to navigate by 5 frames. This [5] is especially handy when you are in subtitle section that has a heavy effect.
0.0.7.39+: When seeking frame-by-frame by [<-] / [->], a3r also tries to respect the line order of subs. For instance, if ASS has Line1 (01.00), Line2 (02.00), and Line3 (01.50) and if you seek 01.00 to 02.00, Line1 then Line2 will be focused, ignoring Line3, which is between Line1 and Line2 in time order.
• [Alt] and [Tab] modifiers are valid for [PageUp] [PageDown] too. These let you navigate subtitles by 10, or 100 Dialogues. (The numbers only include Dialogues. Comment lines are not counted.) [Ctrl] + [PageUp]/[PageDown] means "go to the first/last Dialogue."
• [Shift] + [PageUp]/[PageDown] lets you navigate to the next/previous 'key' subtitle. A key subtitle is a subtitle where the start time changes. This feature comes in handy when your script has a subtitle cluster, i.e. a set of many Dialogues sharing the same timestamps for some effects.
• [Num+] and [Num-] let you navigate through the absolute timeline, by one minute. With [Alt], navigating is by 10 minutes, and with [Shift] 30 seconds. [Num *] lets you jump to the first keyframe after 1:19.50. This means "skip the OP" in typical anime.
• [Num .] (0.0.7.1+): to the last video frame where you can see the current subtitle ("Dialogue"). The Dialogue is on this frame, but not on the next frame.
• [Num 0] (0.0.9.1+): to the first video frame where you can see the current Dialogue. The Dialogue is on this frame, but not on the previous frame.
• [Num 1] (0.0.9.4+): to the first video frame where you can no longer see the Dialogue in question. That is, the frame right after the last frame with that Dialogue. The Dialogue is on the previous frame, but not on this frame.
• 0.0.7.38+: [Shift]+[Ctrl]+[Right/Left] = Next/Prev scene change, provided that a scene-change frame list has been imported.
• 0.0.7.40+: [↓]/[↑] (Up Arrow/Down Arrow) = Sub-to-sub navigation along the timeline. Dialogues are sorted by Start Time.
[↓]/[↑] = Goes to the video frame where the (chronologically) next/prev sub starts. The new time stamp may be equal to the current one (if so, the video frame does not change, but a different Dialogue is focused.)
[Shift] + [↓]/[↑] = Same as [↓]/[↑], except that the new time stamp is to be greater/less than the current one and may not be equal to. The next/prev key-sub is to be focused.
NOTE 1: If the current sub is the very last/first, [↓]/[↑] (with or without [Shift]) have no effect.
NOTE 2: Do not confuse this with [PageDown]/[PageUp], which let you navigate line by line. [↓]/[↑] and [PageDown]/[PageUp] work similarly if, and only if, the Dialogues (as lines in the ASS file) are sorted chronologically, which is generally not true.
• 0.0.7.46+: [Ctrl]+[G] = Go to Frame... (Compatible with VirtualDub) by Frame # or Time. You can use a SPACE instead of a COLON. For instance, 1 23 would mean 0:01:23.00.
• 0.0.7.47+: in [Ctrl]+[G], a trailing space   works like  0, i.e. :0. For instance, would mean 0:05:00.00.
• 0.0.9.3+: [Num /] (VK_DIVIDE) is another shortcut for Go to Frame..., same as [Ctrl]+[G]. Also, - works like   too.

#### "Go to Frame" Dialogbox

The "Go to Frame" dialogbox pops up when you hit [Num/] or [Ctrl]+[G], where you can specify the frame to jump to by the frame number itself, by the timestamp, or by the percentage. Basically, unrecognized characters are ignored. Starting with version 0.1.0.0, you can also specify the offset and/or the new cursor position.

Text You Enter Meaning Note
12345 Frame 12345 Frame numbers are 0-based, same as in VirtualDub or Avisynth. The first frame is 0, the second frame is 1, and so on.
1:2 Timestamp 0:01:02.00 If the input contains a colon, it is usually parsed as a timestamp. You can omit the leading zero. Also, you can use [Space] or [+] or [-] to input ":" (they are easier to type) unless the text contains "(".
0:01:23.45 or 1:23.45 Timestamp 0:01:23.45 You must use "." as a decimal point; "," doesn't work.
4: Timestamp 0:04:00.00 If the string ends in ":", ":0" is implied. You can quickly jump to the frame at 4:00 by hitting [Num/], [4], [Space], [Enter].
33.3% 33.3% of the current video Would be Frame 3330 if the number of frames was 10000.
12345(6) Frame 12345, Offset +6 Jump to Frame 12339. An integer surrounded by "(" and ")" after the frame number, the timestamp, or the percentage is understood as the offset unless a comma is included.
12345a Frame 12345, Offset +1 Jump to Frame 12344. The character "a" coming right after the frame number is an alias to "(1)", specifying 1-based frame numbers. Our Frame 12344 is called "12345" by AviUtl in the default settings or any other application that calls the first frame "1", and here "12345a" means "Go to the frame called 12345 by AviUtl", that is Frame 12344 if you call the first frame "0" as we do.
12345(100,200) Frame 12345, {\pos(100,200)} Jump to the frame and move the mouse cursor to the specified position. Two integers seperated by a comma, surrounded by "(" and ")" after the frame number, the timestamp, or the percentage are understood as coordinates.
(100,200) {\pos(100,200)} Move the cursor to the specified position in the current frame. You cannot specify the offset in this case.
12345(-1)(100,200) Frame 12345, Offset -1, {\pos(100,200)} You can specify the offset and the position at the same time, whichever may come first, after the frame number, the timestamp, or the percentage.

### Video

• Map AVI Structure (0.0.7.20+): A simple viewer for the AVI RIFF structure, listing every chunk's name, size, offset, and a dump of the first part both in hex and in a human-readable text. Chunks in a 'LIST' are mapped recursively. For the 'movi' List, only the first few chunks are mapped for simplicity.
• AVI JUNK Viewer (0.0.7.20+): Dump every byte in the 'JUNK' chunk(s) in a human-readable form. Quite a few AVI files contain "hidden" information there, such as the name of the application that created or modified the file.

0.0.7.20–22: The above tools didn't work for a large file. Also the tools were buggy and imperfect. For instance, JUNK Viewer didn't dump non-top-level 'JUNK' chunks.

0.0.7.23+: The above tools work also for an AVI file larger than (or equal to) 2 GiB, i.e. an OpenDML AVI file with RIFF 'AVIX' chunks. 'JUNK' in 'LIST' is searched for recursively, except in LIST 'movi'.

0.0.7.38+: Can import a "Scene-change frame" list, enabling to seek to the next/prev SC frame. The list file must be an ASCII plain text. The frame number can be either 0-based or 1-based, automatically detected. Also you can export the keyframe list. (Shortcut keys changed in 0.0.9.25)

### Audio

• Demux (0.0.7.47+): A simple demuxer to extract an audio stream from AVI (which you have loaded by [L], or File | Load Video/Image...), and saves it as a file as it is (without decompressing to WAV). MP3 (CBR/VBR), AC3, and MP2 are tested. Not tested for DTS and MP1. Other formats are currently not supported. Note that ACM codecs are needed to play AC3 and MP2 in AVI. If AVI is multiaudio, only the first audio stream is extracted (not tested).

Free (GPL).

## Author

If you have any trouble, you might want to contact the author through

## More History

• 2007-01-16 v0.0.6.0-beta
• 2007-01-28 v0.0.7.5-alpha: [NEW] You can draw a polygon as ASS {\p1}...{\p0} OR {\clip(...)}.
• 2007-07-15 v0.0.8.0-beta
• 2007-10-21 v0.0.9.29-alpha: [NEW] Simple Timer: Sub Station Alpha-like (but Unicode-based) simple time-from-wav tool.
• 2008-01-05 v0.0.9.42-alpha: [NEW] VerifyFonts: warns if a code point not supported by the font is used in ASS.
• 2008-01-23 v0.0.9.45-prebeta: [FIX] Occasional crash when closing/reopening a file, especially during "auto-reload on change" (RoC).
• 2008-07-20 v0.0.9.58-prebeta: [NEW] "Timing" menu. [NEW] You can view and edit the ASS file in an external editor by hitting [Alt]+[Enter]. (*1)

(*1) For that to work, you must add the keys and values like the following examples in your a3r.ini:
[Editor]
Path=C:\Path to\your\Editor.exe
Options=%s --line %d
where %s will be replaced with the path of ASS to open, and %d will be replaced with the line number (both are required). The actual switches are editor-dependent. The editor must be able to open an ASS file in its character encoding, typically in Unicode.

• 2008-08-12 v0.0.9.59-prebeta: [NEW] Helps to create vertical or right-to-left karaoke (to be documented).
• 2008-10-24 v0.0.9.66-prebeta: [NEW] Audio is now less likely to stutter even when heavy effects are previewed at the cost of less quick (but still satisfactory) response time. This is configurable. See the explanation for the Audio Buffers options.
• 2008-12-11 v0.0.9.69-prebeta: [NEW] High-quality fade. Split/Join.
• 2009-02-10 v0.1.0.3 (pre): [NEW] A shortcut to help making vertical karaoke (semi-auto) quite efficiently. I'll explain this later.
• 2009-03-07 v0.1.1.0-alpha: [NEW] De-Overlap tool, which helps you work around the "4a" bug of VSFilter in softsubs.
• 2009-03-18 v0.1.1.2-alpha: [NEW] Font Viewer: Filter: This enables you to make a list of fonts that support a specific code point (for example, when you want to know which of your fonts support 'WHITE HEART SUIT' (U+2661) ♡ ).
• 2009-03-25 v0.1.1.3-alpha: [NEW] New options in the Decorate Karaoke t/r tool: Read the secton about the Change t(0,0) to t(0,1) option and the section about the Token Finalizer and r-less t-r karaoke in Decorate Karaoke t/r.
• 2009-05-02 v0.1.1.5-alpha: [NEW] The “Load ASS Quickly” option. About 25% faster in some cases. If enabled, you can also load ASS partially using the ;{*a3r::EOF} directive, for example skipping the complicated karaoke section which would take a long time to load. This may be useful when you do many small edits while previewing the results with the “Auto-Reload on Change” option enabled. In such a case, the file may be reloaded more than 10 times faster.
• 2009-05-28 v0.1.1.6-beta: [MOD] Split (J): The current caret position (in the edit box on the main window) is used as the split point, if possible. [NEW] In many edit boxes, you can get the Unicode name of a character (for example, “U+30BD [ ソ ] KATAKANA LETTER SO”) at the caret position, by right-clicking. In some edit boxes, the same information is also shown on the status bar.
• 2009-06-30 v0.1.1.7-beta: [NEW] The Compact Fonts tool, which copies all the font files required for the current ASS just like Verify & Copy Font Files To, except it rewrites the font files so that they contain the minimal glyph data required for the current ASS (so-called subsetting). Typically, use it to make TTF files to be attached to softsubbed MKV. For example, if you need to attach a huge Chinese font file (say 3 MiB) that supports 6000 characters but only 600 of them are actually used in your softsub, probably you can just attach a 300 KiB file instead of the original 3 MiB one and save 2.7 MiB.
• 2009-08-09 v0.1.1.8-beta: [FIX] For some PostScript fonts, it was not possible to get the font file name from the font face name. [FIX] SPACE key no more scrolls the editbox when it’s not read-only. [NEW] Fancy Note v3 BETA: This is almost like v2, except it has more sophisticated fade control. [NEW] Unicode character name is now also reported for non-BMP. The internal names list is gzip’ed, making the exe about 500 KiB smaller than the previous version. [NEW] VC2008-sp1 builds are available. To use them, you may need to install the Runtime first. [NEW] Font Viewer: you can use an Ideographic Variation Sequence (IVS) in the sample text, and (if supported by the font) it’s rendered correctly when you enable both the Alt. Draw option and the VS17+ (IVS) option.
• 2009-09-01 v0.1.1.9-beta: [FIX] The Compact Fonts tool and the List Used Characters tool were broken in v0.1.1.8. VSFilter to 20090624.
• 2009-10-03 v0.1.1.10-beta: [NEW] <Font Viewer | Tools | Add Font> lets you preview a font without actually installing it.
• 2009-11-05 v0.1.1.11-beta: [NEW] The Justification Helper tool, for text justification. [MOD] Supporting Unicode character names： updated from Unicode 5.1 to 5.2.
• 2009-11-15 v0.1.1.11a-beta: [FIX] Preview was broken in several tools in 0.1.1.11. (Hotfix)
• 2010-01-04 v0.1.1.12-beta: [NEW] Unicode normalization in Editbox (Right Click menu). [NEW] Save As Plain Text (WAS: Save As ASCII) now supports more output formats (UTF-8, etc.).
• 2010-02-10 v0.1.1.13-beta: [NEW] Improved Hash supports (Tools | Hash). [NEW] Faster and improved Save As (Ctrl+U). [FIX] Save As Plain Text: a strange behavior was possible if the text contains a ligature. [FIX] Shortcuts using the US [,][.] keys were broken in some keyboard layouts (e.g. French). [NEW] List Collisions; Fancy Note v4-alpha; the "2085 ms by Alt+Left/Right" option; the "Force-Enable Magnifying Glass" option.
• 2010-04-03 v0.1.2.0-alpha: [FIX] Possible crash while "Scanning" subtitle text, as in multi-state karaoke. [FIX] Stuttered audio playback occurred easily. A regression in v0.0.9.67. [FIX] Video wasn't rewound if you hit [F] twice quickly. [FIX] The main track bar wasn't re-enabled when preview was paused. [MOD] Improved file loading: ASS now loads 30-40% faster. [NEW] Verify (Ctrl+Shift+V) and Validate (Ctrl+Alt+Shift+V) tools now report unclosed \r, if any, which causes a problem (demo) in softsub on MPC/MPC-HC. [NEW] Supports ICU 4.4.
• 2010-05-06 v0.1.2.1-beta: [FIX] List Collisions: A collision was not reported if the 2 Dialogues share the same start time. [FIX] Compact Fonts: couldn't handle a symbol font correctly in some settings. [MOD] Font Viewer: Add Font has been improved, esp. for TTC.
• 2010-06-02 v0.1.2.2-beta: [FIX] A regression in v0.1.2.0, where a color code with a trailing ampersand (e.g. &H001122&) was not accepted in [Styles]. [NEW] Grad4v2: the Alternative option. [NEW] Mid-frame (semi-faint) fade-in/out. ([Ins] then [Y]/[W]). [NEW] An optional, larger magnifying glass ([F8]-[Alt]+[F8]). [FIX] Bugs related to subtitle seeking.
• 2010-07-08 v0.1.2.3: A minor revision to Fancy Note. Other minor fixes and enhancements.
• 2010-07-11 v0.1.2.4: [FIX] SSA importer and several other tools broken in v0.1.2.3.
• 2010-08-05 v0.1.2.5: [FIX] FancyNote (4.1) was broken in v0.1.2.3. This bug has existed since 2010-06-24. [FIX] A crash while reading SSA/ASS that contains an incomplete Comment. [FIX] Simple Timer: could not load SSA/ASS properly. This bug existed in v0.1.2.0–0.1.2.4. [FIX] Several other minor problems.
• 2010-09-16 v0.1.3.0-beta: [NEW] Interpolate/Extrapolate: Typically, you can use this tool for moving Sign Subs. With this, any ASS effect, including \p, \clip, \iclip, is animatable. [NEW] Supports Unicode 6.0. [FIX] Several bugs.
• 2010-10-17 v0.1.3.1-beta: [FIX] A bug introduced in v0.1.3.0: colors in ASS styles were not parsed right.
(Note: You may need VC2008 SP1 Update).
• 2010-11-07 v0.1.3.2: [FIX] “Next Marked” and a few other menu items didn’t work right in some situation.
• 2010-12-12 v0.1.3.3: [FIX] Mostly minor bug fixes.
• 2011-01-12 v0.1.4.0: [NEW] Minor enhancements and modifications in the Detect Subtitle Overruns tool. Overruns by 6 frames are reported by default. [FIX] A Unicode character name was not reported right if it contains “SYLLABLE”. Regression in v0.1.3.0. [FIX] Font Viewer: The Meiryo UI font was not always listed. [NEW] Font Viewer: now able to report missing glyphs in CFF fonts too. [FIX] Other minor bug fixes.
• 2011-02-07 v0.1.4.1: [NEW] Name to Style Name tool: automatically applies a proper style according to Name (Actor). [NEW] Font File Filter tool: looks into a folder with thousands of font files, and gathers font files that support a specific character. [MOD] The Font Viewer tool & the Verify Fonts tool: 15–50% faster. [FIX] Many bugs, especially in the Simple Timer tool.
• 2011-02-10 v0.1.4.2: [FIX] Possible access violation and deadlock on Verify Hash. A few other fixes.
• 2011-02-13 v0.1.4.3: [FIX] Simple Timer: A waveform image of 44100 Hz WAV was inaccurate. [FIX] Simple Timer: the very last part (about 0.9 seconds) of a WAV file sometimes didn't play.
• 2011-03-11 v0.1.5.0-beta: [NEW] Simple Timer: uses less memory; accepts more formats of WAV (8/24-bit, multichannel, 22050 Hz, etc.). [FIX] Various small fixes and improvements in a few tools, especially, Simple Timer and Striped Colors.
• 2011-04-16 v0.1.5.1: [NEW] Font Viewer: the Get Path tool to embed a specific glyph as ASS drawing tags, as in:
• 2011-05-09 v0.1.5.2: [NEW] The Transform tool: can do a few kinds of transformations, such as moving all the points ({\pos(x,y)} etc.) in specified Dialogues parallelly. [MOD] CRT statically linked (you no longer need to install the run-time library).
• 2011-06-01 v0.1.5.3: [FIX] The Compact Fonts tool didn’t work right for non-BMP code points; a regression in v0.1.3.0.
• 2011-07-02 v0.1.5.4: Minor fixes and improvements.
• 2011-08-09 v0.1.5.5: [FIX] Simple Timer: couldn’t save right in UTF-8. [FIX] Handle an MPEG audio frame of 576 samples. [FIX] AAC was not demuxed right; a regression in v0.1.5.4.
• 2011-12-15 v0.1.6.0: Various fixes and small improvements.
• 2012-04-14 v0.1.6.1: [FIX] ShiftTime: inconsistent after sorted.; CompactFont was problematic with some option. [NEW] 120-fps options.; Parse Matroska; Pad/ChangeCRC - supports Matroska; Unicode 6.1 supported.