home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 August / Chip_2003-08_cd1.bin / tema / virtualdub / plugins / subtitler / readme.txt next >
Text File  |  2003-02-07  |  30KB  |  694 lines

  1. Subtitler - Sub Station Alpha v2.x/4.x subtitling plugin for VirtualDub
  2. Copyright (C) 2000-2002 Avery Lee, All Rights Reserved.
  3.  
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2 of the License, or
  7. (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. GNU General Public License for more details.
  13.  
  14. You should have received a copy of the GNU General Public License
  15. along with this program; if not, write to the Free Software
  16. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18.  
  19.  
  20. What does this filter do?
  21. =========================
  22. The "subtitler" filter is designed to draw text onto video.  As its name
  23. implies, this functionality is usually used to subtitle video that is in
  24. a foreign language.  Subtitler is designed to generate crisp, high-quality
  25. text with a minimum of fuss.
  26.  
  27. Currently, the script format is compatible with the Sub Station Alpha (SSA)
  28. program by Kotus, which at this time is available for free from:
  29.  
  30.     http://www.eswat.demon.co.uk/
  31.  
  32. Since this filter does not provide an interface for you to edit the scripts,
  33. it is highly recommended, although not strictly necessary, to install SSA 4,
  34. and to download a copy of the Sub Station Alpha 4.00 script format document.
  35.  
  36. This filter is not a part of Sub Station Alpha, nor is it endorsed by Kotus.
  37.  
  38.  
  39. What's new in version 2.3
  40. =========================
  41. Version 2.3 fixes a memory corruption issue and incorporates minor speed
  42. optimizations in the rasterizer.
  43.  
  44.  
  45. Using the subtitler
  46. ===================
  47. Copy subtitler.vdf into the PLUGINS\ directory in the VirtualDub
  48. program directory.  The filter will then automatically load when
  49. the main program starts.
  50.  
  51. To use it, go to Video > Filters and add the "subtitler" filter.  You'll
  52. then be able to select a script filename and optionally toggle text
  53. antialiasing.  Subtitler accepts Sub Station Alpha V2.x and V4.x
  54. scripts.  Text is then applied to the outgoing AVI according to the script.
  55.  
  56. Scripts supply a series of _dialogue events_ to display; these are based off
  57. of templates known as _styles_.  Each event has a start time, when the
  58. subtitler finds a place for the text and begins displaying it on screen,
  59. and an end time, when the text expires and disappears.
  60.  
  61.  
  62. Viewing a demo of the subtitler's effects
  63. =========================================
  64. A script called DEMO.SSA has been included with this filter, along with an
  65. accompanying video file GRAY.AVI.  Load the AVI into VirtualDub and add the
  66. subtitler filter with default settings and the DEMO.SSA script, then hit
  67. F5 to view.  For fun, you can also load the script into Sub Station Alpha
  68. 4.x, but some effects won't display properly.
  69.  
  70.  
  71. Timing
  72. ======
  73. The post-decimal part of Sub Station Alpha timings are in hundredths of a
  74. second, not pictures.  Times in SMPTE format need to be modified before being
  75. placed in an SSA script.
  76.  
  77. Although it is not recommended, you can place multiple dialogue events in
  78. a script that have the same start time.  The filter will handle them in the
  79. order that they appear in the script, resolving collisions in favor of events
  80. occurring earlier in the file.
  81.  
  82. SSA timing correction (ramping) is not supported.  If you find SSA timing
  83. corrections in an existing script, you will need to manually skew the timings
  84. in the actual dialogue lines instead.  (This assumes that the timings in the
  85. script coincide with those in your video source, which is actually pretty
  86. unlikely given the timing accuracy of consumer video and audio capture
  87. devices.)
  88.  
  89.  
  90. Positioning
  91. ===========
  92. The subtitler filter is designed to properly render scripts that were
  93. originally intended for subbing with a genlock, i.e. titles composed for
  94. full screen rendering.  As a result, it attempts to imitate SSA positioning
  95. as closely as possible and then scales the result to the video window.
  96. Although the SSA script format uses pixel values for positioning, subtitler
  97. interprets these in terms of the original script's screen size.  The screen
  98. size is denoted by a PlayResY: header at the top of SSA version 4 scripts:
  99.  
  100.   [Script Info]
  101.   ; This is a Sub Station Alpha v4 script.
  102.   ; For Sub Station Alpha info and downloads,
  103.   ; go to http://www.eswat.demon.co.uk/
  104.   ; or email kotus@eswat.demon.co.uk
  105.   Title: <untitled>
  106.   Original Script: <unknown>
  107.   Collisions: Normal
  108.   PlayResY: 480
  109.   PlayDepth: 0
  110.  
  111. Subtitler assumes a 5:4 aspect ratio for PlayResY:1024 (1280x1024)
  112. and a 4:3 aspect ratio for all other resolutions.  Font sizes are also scaled
  113. down by the same factor as the margins.  If PlayResY: is absent, as it will
  114. be in version 2 scripts, the subtitler will instead interpret margins and
  115. font sizes directly, which is probably not appropriate.
  116.  
  117.  
  118. Collision detection and resolution
  119. ==================================
  120. If the default placement of a subtitle overlaps one that is already being
  121. displayed, a collision is said to take place.  Collision resolution is the
  122. process where the subtitler moves the new subtitle until it no longer overlaps
  123. any existing ones.  Titles that have vertical flush bottom or center placement
  124. move up to resolve; top titles move down.  If the subtitle is moved all the
  125. way to the opposite border without resolving, it simply overlays whatever
  126. exists at the terminal position.
  127.  
  128. Subtitles never move once they have resolved, so you will need to be careful
  129. whenever you have back-to-back subtitles.  Subtitler removes subtitles before
  130. adding new ones for a given frame, so subtitles that do not overlap in time
  131. will never collide.  (The exact ending time is not part of the subtitle and
  132. does not collide with another subtitle that starts at that same time.)  If
  133. you manage to have a tiny overlap between the titles though, successive titles
  134. will alternate and/or walk up and down the screen as they collide, which is
  135. very disconcerting.
  136.  
  137. SSA's color collision resolution is not supported and all subtitles will
  138. display in their primary color regardless of collisions.  Also, moving text
  139. (Banner and Scroll Up effects) do not participate in collisions -- they will
  140. never cause collisions or move as a result of them, and thus care should be
  141. taken not to overlap scrollers.
  142.  
  143. If you need to remain compatible with SSA4 to output to a genlock, you also
  144. need to be aware that SSA's collision detection and resolution support is
  145. considerably more restricted: titles must have the same style, must have
  146. bottom positioning, and must not have alignment or margin overrides in order
  147. to collide and resolve.
  148.  
  149. Final note: Seeking backwards in the VirtualDub editor with the subtitler
  150. may not produce the expected results when collisions occur, when you have
  151. dialogue lines like this:
  152.  
  153.     5:27-5:29        Title A
  154.     5:28-5:31        Title B
  155.     5:29-5:33        Title C
  156.  
  157. When played from the beginning, the screen will look like this at 5:30 due
  158. to a collision between A and B:
  159.  
  160.     Title B
  161.     Title C
  162.  
  163. If you seek directly to 5:30, the subtitler may not process title A, and
  164. will instead render this:
  165.  
  166.     Title C
  167.     Title B
  168.  
  169. To avoid this problem, keep your collision chains to a manageable length,
  170. and step forward from a couple of seconds back when you need to verify
  171. placement in the presence of collisions.
  172.  
  173.  
  174. Text escapes
  175. ============
  176. The following character pairs are specially interpreted by the subtitler:
  177.  
  178.     \n    soft return (manual wordwrap)
  179.     \N    hard return
  180.  
  181. These are nonstandard and supported only by the subtitler:
  182.  
  183.     \h    nonbreakable space (160)
  184.     \!    VirtualDub version string
  185.     \\    backslash
  186.     \{    open brace
  187.  
  188. Note that the filter will discard single backslashes that would begin
  189. illegal escapes, whereas SSA displays them.  This incompatibility is
  190. intentional.  SSA's handling of backslashes outside of style overrides makes
  191. some text combinations impossible, such as actually displaying "\n."  You
  192. can do this with the filter with \\n.
  193.  
  194.  
  195. Style overrides
  196. ===============
  197. Text within braces {} is considered to be part of a style override; these
  198. are used to modify the display of text by modifying parameters beyond what
  199. the style would normally prescribe.  Subtitler supports the following style
  200. overrides:
  201.  
  202.     \a      Alignment                   {\a4}top
  203.     \b      Bold                        {\b1}bold{\b0}
  204.     \c      Color                       {\c&Hffff00;}cyan{\r}
  205.     \fs     Font size                   {\fs100}big text
  206.     \fn     Font name                   {\fnCourier}typewriter
  207.     \fe     Font encoding               {\fe2}l{\fe0} bulletted item
  208.     \i      Italics                     {\i1}sit!!!!{\i0}
  209.     \k      Karaoke                     {\k20}I {\k50}can't {\k50}sing
  210.     \K      Smooth karaoke (extension)  {\K100}AAAAAAAAAAaaaaaaaaa!!!!!
  211.     \q      Wrap control (extension)    {\q1}I like EigoAnim style.
  212.     \r      Reset style overrides       {\fs20}oops {\r}...aahhh...
  213.  
  214. See the SSA4 script format documentation for better descriptions of these
  215. overrides.  Text escape characters, such as \n, are not processed inside
  216. of style override sets.
  217.  
  218.  
  219. DBCS support and brace escapes
  220. ==============================
  221. Subtitler ignores open braces and backslashes in the second character
  222. of text encoded using a double-byte character set (DBCS).  This skip
  223. is sensative to the font encoding currently in use, so in the dialogue
  224. text
  225.  
  226.     {\fe128}â\NOâ{â}{\fe0}â\NOâ{â}
  227.  
  228. the section using Shift-JIS (\fe128) decodes to three katakana glyphs
  229. and two Latin letters, while the second gives two italic f's, an O,
  230. a hard line break, and an illegal style override.  (No, it doesn't
  231. actually mean anything in Japanese.  At least, I hope.)  DBCS processing,
  232. like escapes, are suspended inside style overrides, but you shouldn't
  233. need to use any double-byte characters in them.
  234.  
  235. Windows 95/98 do not normally have the necessary fonts or routines to
  236. support rendering DBCS text, but installing the appropriate language
  237. pack from Internet Explorer will suffice.  Japanese Language Support from
  238. IE 5.01 has been tested to work under Windows 98, and Chinese and Korean
  239. should work as well; you do not need to install the Input Method Editor
  240. (IME) support.  Under Windows 2000, you can install the appropriate
  241. language support from the Regional Control Panel.
  242.  
  243. If you are using third-party DBCS support that hooks into the font
  244. routines of a non-DBCS (SBCS) version of Windows, such as NJWIN, you will
  245. probably need to manually escape trailing bytes that are open braces or
  246. backslashes, because Windows won't know how to skip over the trail bytes
  247. and the subtitler will process them.  The above example would thus become:
  248.  
  249.     {\fe128}â\\NOâ\{â\}{\fe0}â\NOâ{â}
  250.  
  251. This escaping is incompatible with both SSA and regular DBCS
  252. processing, however.
  253.  
  254.  
  255. Font encodings
  256. ==============
  257. By default, ANSI_CHARSET encoding is used unless overridden with the encoding
  258. setting in the style or with the {\fe} override.  You will need to specify
  259. a different code page if the character you want is not in the standard
  260. printable 8-bit set.  Some useful encodings are:
  261.  
  262.     ANSI_CHARSET            0
  263.     DEFAULT_CHARSET         1
  264.     SYMBOL_CHARSET          2
  265.     SHIFTJIS_CHARSET        128
  266.     HANGEUL_CHARSET         129
  267.     HANGUL_CHARSET          129
  268.     GB2312_CHARSET          134
  269.     CHINESEBIG5_CHARSET     136
  270.     OEM_CHARSET             255
  271.  
  272. Whether or not a given character set is available depends mainly on the font;
  273. if you are running Windows NT/2000, Character Map can be used to check since
  274. it supports Unicode on that platform.  Arial in particular, supports a large
  275. number of encodings.  Note that a change in character set can result in a
  276. change of font, if the current font doesn't support the encoding but another
  277. font in the system does.
  278.  
  279. Double-check the subtitler's output if you are using a double-byte character
  280. set (DBCS), such as Shift-JIS, since the word-wrapping hasn't been
  281. extensively checked for DBCS compatibility although it should work fine.
  282.  
  283.  
  284. Controlling word wrapping
  285. =========================
  286. Subtitler supports three modes for word wrapping:
  287.  
  288. * Manual mode (\q2):
  289.  
  290.   No lines are broken unless either a soft break (\n) or hard break (\N) is
  291.   used.
  292.  
  293. * Automatic mode (\q1):
  294.  
  295.   Lines are broken automatically at margins.  Soft breaks are ignored but
  296.   hard breaks work.  Automatic mode is recommended for text that is left-
  297.   justified.
  298.  
  299. * Smart mode (\q0):
  300.  
  301.   Same as automatic mode except that the subtitler squeezes the margins as
  302.   far as possible without adding an extra line, so that the lines come out
  303.   more even.  This mode is best used for centered text.
  304.  
  305. The default mode may be selected in the filter options, and can also be
  306. controlled by the {\q} style override.  However, only one wrapping mode can
  307. be used per dialogue line -- it is not possible to use manual breaking on
  308. one part and have the rest be automatic.
  309.  
  310.  
  311. Space alignment
  312. ===============
  313. Adding spaces at the beginning or end of dialogue lines or around \N's to
  314. push text on-screen won't work with the filter, since it trims whitespace off
  315. the ends of each processed line during word wrapping.  If you must force
  316. space at the ends, use nonbreakable spaces (\h or Alt-0160).  Spaces are not
  317. collapsed in the middle of a line.
  318.  
  319.  
  320. Alignment overrides
  321. ===================
  322. Alignment overrides {\a} are supported, but multiple \a's in the same dialogue
  323. line should be avoided.  The reason is that SSA4 interprets multiple alignment
  324. overrides differently in its full-screen renderer than in its preview window.
  325. As a result,
  326.  
  327.     abc{\a3}def{\a1}
  328.  
  329. renders on the left in the script editor and on the right onto tape.  Subtitler
  330. imitates the full-screen renderer and always uses the first alignment override
  331. it finds.
  332.  
  333. It is not possible to use two alignments in the same subtitle -- the entire
  334. subtitle always uses one particular alignment.
  335.  
  336.  
  337. Antialiasing
  338. ============
  339. Subtitler antialiases all fonts by default at an 8x8 setting, i.e. it renders
  340. *all* glyphs at eight times normal size and reduces it down.  The result is
  341. crisp, high-quality text.  You can turn off font antialiasing by disabling the
  342. advanced rasterizer, but beware that a number of features will stop working if
  343. you disable it: borders will be forced to one pixel, scrolls and banners will
  344. not work, and no shadows will be drawn.
  345.  
  346.  
  347. Shadows and borders
  348. ===================
  349. Shadows always render as dropshadows of the outline with 50% translucency;
  350. borders render at a given circular radius from the text.  Shadows and borders
  351. antialias along with the text.  Note that large borders should be avoided since
  352. it is possible for borders to overlap text.
  353.  
  354. Although not recommended, the filter permits a border of size zero (0), and
  355. will turn off the border in response.
  356.  
  357. Shadows and borders are always specified in absolute pixel values, regardless
  358. of the PlayResY: tag.  Otherwise, most shadows and borders from existing
  359. scripts would be too small to be seen.
  360.  
  361.  
  362. The *Default style problem
  363. ==========================
  364. Asterisks are ignored at the beginning of style names, so the *Default style
  365. is really the Default style.
  366.  
  367. Sub Station Alpha saves your default style in the script under the *Default
  368. tag.  However, its playback engine always interprets the Default style as
  369. whatever style is default on your computer, not the Default style in the
  370. script.  Subtitler does not have access to the SSA settings and will use the
  371. Default style actually in the script.  Thus, if you attempt to use the script
  372. on another computer it may be rendered differently by SSA and subtitler.  To
  373. fix this problem, rename the Default style in the .ssa file to force SSA to
  374. use the style defined in the script or modify the script to match your SSA
  375. settings.
  376.  
  377. In general, you should avoid using *Default, and define a custom style instead.
  378.  
  379.  
  380. Karaoke
  381. =======
  382. Karaoke is the highlighting of text in response to a song, so that others can
  383. sing along to it.  Apply this feature with caution, since many people shouldn't
  384. be allowed to sing in the first place.
  385.  
  386. Activate karaoke by specifying {\k} or {\K} style overrides in the text:
  387.  
  388.     {\k50}This takes half a second {\K100}This takes a second
  389.  
  390. The number indicates the hundredths of seconds it should take to highlight the
  391. text; {\k} snaps the text on like SSA, while {\K} gradually highlights from
  392. the left.  In both cases, text is changed from the secondary style color to
  393. the active color, which is the primary style color unless overridden.
  394.  
  395. You do not need to ensure that the sum of the \k tags adds up to the event
  396. length.  If the total karaoke time is too short, the event will simply be
  397. displayed fully highlighted for the remainder, and if it is too long, it is
  398. cut off.  The "Karaoke" event type in the dialogue line is also unnecessary,
  399. so you may apply other events to the karaoke line if you wish and both effects
  400. will take place.
  401.  
  402. A {\k0} or {\K0} tag acts as a brickwall to karaoke since it caps the end of
  403. the last karaoke string and activates immediately to the primary color once
  404. the time has passed.  Subtitler tracks karaoke even in the same override, so
  405. {\K50\K50} pauses for half a second and then runs the next string of text for
  406. another half second.
  407.  
  408.  
  409. Banner and scroll
  410. =================
  411. Text can be scrolled horizontally or upwards by making use of the Banner and
  412. Scroll Up effects.  These effects are specified in the effects portion of the
  413. dialogue control line:
  414.  
  415. Dialogue: Marked=0,0:02:02.00,0:02:17.00,MainT,,0000,0000,0000,Banner;30,Text is fun.  We like scrolling text.
  416. Dialogue: Marked=0,0:02:02.00,0:02:17.00,MainT,,0000,0000,0000,Scroll Up;40;50;120,{\q1}You can scroll lots of text up this way. Personally, I find it a little annoying to have a lot of text coming up very slowly on screen, but it's a useful technique to have for credits and other long lists in tabular form.
  417.  
  418. The Banner effect scrolls text left from the right border and takes a single
  419. argument, the speed of the scroll.  Scroll Up takes three arguments, two
  420. being top and bottom Y positions to define a window, and the third being
  421. the speed.  If the Y window is (0,0), the entire screen is used.  In both
  422. cases, the speed is five times the number of seconds the text should scroll
  423. before just hitting the opposite border, so a speed of 40 means an 8-second
  424. window.  This is considerably different from SSA's interpretation of the
  425. speed as a delay parameter, but it's also easier to use.
  426.  
  427. Animated effects are automatically excluded from collisions.  They will never
  428. move away from their designated path, nor will they cause other text to move.
  429. This means you will need to take care not to overlay animations on top of
  430. regular dialogue unless you specifically intend to do so.
  431.  
  432. NOTE: The SSA4 script format document says that the order of arguments for
  433.       Scroll Up is y1;y2;delay.  This is incorrect.  The proper order of
  434.       arguments is delay;y1;y2.
  435.  
  436.  
  437. Fast reload
  438. ===========
  439. The subtitler always reloads the script whenever it is reinitialized by
  440. VirtualDub, which is at the beginning of any preview or save, and after some
  441. menu commands (mostly those that change the filter chain or input video).
  442. This means that you can edit the script in SSA or Notepad, and see the changes
  443. in the next preview without having to modify any settings.
  444.  
  445.  
  446.  
  447. Using Sub Station Alpha in wave timing mode to time against AVI
  448. ===============================================================
  449. The most efficient way to create scripts for subtitler is to use SSA's wave
  450. timing mode, which allows you to quickly generate script timings from a sound
  451. file.  You can create the wave file necessary to do this by copying it out
  452. of the source video file in VirtualDub.  However, the current version of
  453. SSA at this time (4.08) does not accept stereo or 16-bit WAV files.  To
  454. generate a WAV file of the correct format:
  455.  
  456. * Change the audio mode to Full Processing Mode.
  457. * Make sure the audio compression setting is set to PCM (uncompressed).
  458. * In Audio > Conversion, select 8-bit and mono.
  459. * Use File > Save WAV to create the WAV file.
  460.  
  461. You need to do this with the final video source and settings that you are
  462. going to use to subtitle -- your range settings and cuts must be the same,
  463. or the WAV file will not match the video fed into subtitler.  VirtualDub
  464. 1.4.6 and earlier save both range settings and cuts into .vcf files, so
  465. the Load/Save Processing Settings commands will allow you to preserve these
  466. should you need to close VirtualDub between the Save WAV and final Save AVI
  467. operations.  Another way to handle this problem is to create a batch job
  468. for the final process when you do the Save WAV -- subtitler will reload
  469. the script from the specified filename when the job actually executes.
  470.  
  471. Incidentally, you can cut/copy/paste from dialogue text in SSA by right-
  472. clicking on the text pane.
  473.  
  474.  
  475. Saturated colors
  476. ================
  477. Highly saturated colors such as deep red should be avoided, particularly if
  478. you are going to output the result to composite video or compress the result
  479. with a low-bandwidth codec.  The reason is that sharp color edges are poorly
  480. handled by the luminance/chrominance encoding in both cases.  You will get
  481. better results if you use less saturated colors and ensure that your border and
  482. text colors are far apart in brightness; yellow on black is a popular choice,
  483. and mild green is also used.
  484.  
  485.  
  486. Sub Station Alpha unsupported features
  487. ======================================
  488. The following SSA features are not supported:
  489.  
  490. *  Audio, video, and program exec events.
  491. *  Color collision resolution (primary is always used).
  492. *  Embedded fonts and images.
  493.  
  494.  
  495. [V4 Styles]
  496. ===========
  497. Subtitler determines whether a script is in SSA v2 or v4 format by the
  498. presence of the [V4 Styles] group marker.  The only difference in the
  499. filter's behavior between V2 and V4 mode is that the BorderStyle entry in the
  500. style is assumed to be absent in V2 mode, whereas it is skipped in V4 mode.
  501. If you find that your outline, shadow, alignment, margins, and encoding
  502. values in your style entries are being interpreted incorrectly, make sure
  503. the [V4 Styles] marker is present above them.
  504.  
  505.  
  506. Creating SSA scripts from scratch
  507. =================================
  508. Scripts can also be created manually with a text editor.  The best way to do
  509. this is by picking up a copy of the SSA script format from the SSA web site,
  510. but you can start with this:
  511.  
  512.     [Script Info]
  513.     PlayResY: 480
  514.  
  515.     [V4 Styles]
  516.     Style: *Default,Arial,22,8454143,8454143,8454143,2039583,0,0,2,4,2,30,30,20
  517.  
  518.     [Events]
  519.     Dialogue: Marked=0,0:00:00.00,0:00:01.00,*Default,Name,0000,0000,0000,!Effect,Your text goes here
  520.  
  521. The style fields are (from Kotus' reference):
  522.  
  523.     Name, Fontname, Fontsize, PrimaryColor, SecondaryColor, TertiaryColor,
  524.        BackColor, Bold, Italic, BorderStyle, Outline, Shadow, Alignment,
  525.        MarginL, MarginR, MarginV, AlphaLevel, Encoding
  526.  
  527. AlphaLevel is not used; BorderStyle should be left 1, and bold/italic should
  528. be 0 for off and -1 for on.  Alignment should be 1 for left, 2 for center,
  529. or 3 for right, with an additional 4 added on for align up and 8 for vertical
  530. align center.
  531.  
  532. All four colors are specified as 24-bit BGR, which is backwards from HTML's
  533. #rrggbb.  SSA unfortunately writes out its colors in a single unreadable
  534. decimal number, but both SSA and the subtitler will also accept color values
  535. specified using Microsoft Basic hex notation (&Hxxxxxx).  Thus, for a yellow,
  536. specify &H00ffff, and for cyan, use &Hffff00.  You can use Windows Calculator
  537. in Scientific mode to convert between decimal and hex color values.
  538.  
  539. Dialogue events have this form (again, from Kotus):
  540.  
  541.     Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
  542.  
  543. Marked and Name are ignored by the subtitler; MarginL/R/V should be 0 to use
  544. the default style values.  Start and End must be specified as h:mm:ss.tt, with
  545. 't' being hundredths of a second.
  546.  
  547. Be careful to not wordwrap or otherwise break any script lines, since this is
  548. not permitted by the format.  Also, under Windows NT/2000, don't save out
  549. Unicode from Notepad, or programs will be quite unhappy.
  550.  
  551.  
  552.  
  553. Known issues
  554. ============
  555. Due to a bug in VirtualDub 1.3d, this filter cannot be used in frameserver
  556. mode with that version.  The bug was first fixed in VirtualDub 1.4.
  557.  
  558. Special thanks to paQ, who found a number of bugs in earlier releases
  559. and helped immensely in the development of this filter.
  560.  
  561.  
  562. Contact
  563. =======
  564. Please email comments, bug reports, and suggestions to
  565. <phaeron@virtualdub.org>.  I can't guarantee that I'll be able to respond,
  566. but I'll do what I can.  The website for this filter is the same as the
  567. VirtualDub website -- http://www.virtualdub.org/.
  568.  
  569. Have fun!
  570.  
  571. -- Avery Lee <phaeron@virtualdub.org>
  572.    March 3, 2002
  573.  
  574.  
  575. Changelog
  576. =========
  577. Version 2.3:
  578.  
  579. * Fix for addressing error in rasterizer that caused all subtitles to be
  580.   off by one pixel, and the filter to occasionally crash.  Thanks to gabest
  581.   for finding this one.
  582.  
  583. * Added some quick optimizations to the rasterizer to boost curve
  584.   rasterization speed -- basically, the old fist/fistp trick.  Too lazy
  585.   to code a proper Bezier subdivision rasterizer.
  586.  
  587. ----------------------------------
  588. Version 2.2:
  589.  
  590. * Fix for crash on {...}\n construct.
  591.  
  592. * Fixed rasterizer to handle the case where a font outline has a linear
  593.   Bezier curve, i.e. the curve is actually a line, and avoid dividing by
  594.   zero.
  595.  
  596. ----------------------------------
  597. Version 2.1:
  598.  
  599. * Added workarounds for the limitations of 16-bit GDI, which caused severe
  600.   wordwrap and rasterization failures in some cases.  Windows 95/98 sucks.
  601.  
  602. * Did some work to try to make the filter DBCS clean.  Backslashes and
  603.   open braces are no longer interpreted in the trailing bytes of text when
  604.   DBCS encodings are active.
  605.  
  606. * You can now escape open braces (\{) to display them.
  607.  
  608. * All text is now converted to Unicode before display.  This allows CJK text
  609.   to display on SBCS platforms with the appropriate IE support installed.
  610.  
  611. * Word wrap behavior is now adjustable on a per-item basis, and \n works
  612.   as a line break if word wrapping is disabled.
  613.  
  614. * Relaxed the syntax restrictions for time fields; in particular, the
  615.   0:00:00:00 syntax in the SSA script document is now allowed, even though
  616.   it's different from the 0:00:00.00 syntax used by SSA4.  SSA itself doesn't
  617.   care what separators you use.
  618.  
  619. * Changed the ordering of fields in the Scroll Up effect to Scroll Up;d;y;y
  620.   to match SSA.
  621.  
  622. ----------------------------------
  623. Version 2.0:
  624.  
  625. * New antialiased font rasterizer working directly off of Bezier curve
  626.   outlines.  Much, much faster and can support arbitrary rotation, scaling,
  627.   and shearing transforms, although these capabilities are not yet used.
  628.  
  629. * Added support for the Banner and Scroll up effects.
  630.  
  631. * Added karaoke.  The hacks that people were forced to do for karaoke in
  632.   V1.3b were too embarrassingly bad for me to let this go.
  633.  
  634. * I accidentally disabled font caching in the last release.  Whoops.
  635.   This only really speeds up the non-antialiased (i.e. sucky) mode,
  636.   so no big deal.
  637.  
  638. * Dialogue line sorting now checks the order lines are submitted to
  639.   break ties.  Before, the sort was not stable, which meant that
  640.   two lines that had the same start time essentially appeared in
  641.   random order, and you couldn't tell which would end up on top
  642.   if the lines collided.  Now, two events with the same start time
  643.   always issue to the collision handler in-order, so the second
  644.   event always collision resolves against the first.
  645.  
  646. * Font encodings other than ANSI_CHARSET are now supported thanks
  647.   to Karel Suhajda, both in styles and in the {\fe} style override.
  648.   The wordwrapping code is likely not DBCS clean, however, so this
  649.   may not work with some encodings like Shift-JIS. (I can't test
  650.   this, since both my computer and my brain are configured for US
  651.   English.)
  652.  
  653. ----------------------------------
  654. Fixed in version 1.3b:
  655.  
  656. * Fixed a critical smart wordwrapping problem.  The smart wrapping works
  657.   by crunching the margins until an extra line drops out.  If the
  658.   subtitler encountered a dialogue line like:
  659.  
  660.     w\Nw\Nw
  661.  
  662.   it hung in a loop because none of the lines would ever wrap.  The
  663.   filter now stops smart wrapping when this occurs.
  664.  
  665. ----------------------------------
  666. Fixed in version 1.3a:
  667.  
  668. * Fixed some memory leaks and stability issues.
  669.  
  670. ----------------------------------
  671. Fixed in version 1.3:
  672.  
  673. * Style overrides did not always work properly, because subtitler skipped
  674.   too many characters after the first override.
  675.  
  676. * After word-wrapping, all lines from a dialogue line were left-justified
  677.   relative to each other, even though the whole was justified correctly.
  678.  
  679. * \n (soft break) was accepted as a line break, but \N (hard break) was
  680.   not.
  681.  
  682. * Outlines could overlap text if style overrides were used in between
  683.   non-whitespace characters (i.e. err{\i1}or).
  684.  
  685. ----------------------------------
  686. Fixed in version 1.2:
  687.  
  688. * Style name checking ignores leading *'s.
  689.  
  690. ----------------------------------
  691. Fixed in version 1.1:
  692.  
  693. * Subtitles work past one hour.
  694.