mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-20 18:27:13 +02:00
120 lines
3.8 KiB
Plaintext
120 lines
3.8 KiB
Plaintext
$Id$
|
|
|
|
The following information is culled from information from Julio
|
|
Sanchez Fernandez [1] by Rocky Bernstein.
|
|
|
|
SVCD subtitles (Philips Overlay Graphics Text or OGT) are transported
|
|
in an MPEG private stream with stream id 0x70. AC3 subtitle stream
|
|
numbers start at 0,x80 and go to 0,x87. (CVD subtitle stream numbers
|
|
start at stream ID 0 and go to 3.)
|
|
|
|
All numbers are in big-endian and the image is interlaced with a
|
|
resolution of 720x480 for NTSC streams or 720x576 for PAL streams.
|
|
|
|
Data packets start with a 4-byte header:
|
|
|
|
* Stream number (1 byte). Only bits 0-3 are used as there can only
|
|
be up to 8 subtitles.
|
|
|
|
* Packet number(1 byte). The first packet starts at 0; the last
|
|
packet of a subtitle has the 7th bit set. A subtitle can be
|
|
broken up into several packets when it is multiplexed into the
|
|
MPEG stream.
|
|
|
|
* Subtitle image number (2 bytes).
|
|
|
|
* Length of the rest of the packet (described in the next section).
|
|
|
|
================
|
|
SUBTITLE PACKETS
|
|
================
|
|
|
|
The information below comes immediately after the packet header in the
|
|
same packet.
|
|
|
|
* Packet length (2 bytes)
|
|
|
|
The assembled subtitle, with stripped sequence numbers
|
|
|
|
* Option byte (1 byte)
|
|
|
|
This is normally set to 0x2e; bit 3 indicates that a field with the
|
|
display-time of the subtitle is present. What the other bits do is not
|
|
known.
|
|
|
|
* Time to display the subtitle (4 bytes)
|
|
|
|
This in 1/90000'th of a second. This is only present if bit 3 above is
|
|
set. This value specifies how long the subtitle will be shown, not
|
|
when. When the subtitle is to be shown is specified in the PTS in the
|
|
PES header.
|
|
|
|
* X position (2 bytes)
|
|
|
|
* Y position (2 bytes)
|
|
|
|
* Width (2 bytes)
|
|
|
|
This value must be even.
|
|
|
|
* Height (2 bytes)
|
|
|
|
This value must be even.
|
|
|
|
* Unknown (1 byte)
|
|
|
|
* 4 Color Palette Entries (16 bytes)
|
|
|
|
* A pallette entry has the following format:
|
|
|
|
* Y (1 byte)
|
|
* U (1 byte)
|
|
* V (1 byte)
|
|
* Transparency (1 byte). A 0 value means totally transparent and
|
|
255 totally opaque.
|
|
|
|
* Command (1 byte)
|
|
|
|
if cmd>>6 == 1 then a shift command and (cmd>>4)&3 is the
|
|
direction. 0=top, 1=left, 2 = right, 3 = bottom
|
|
|
|
* Odd-field data offset (2 bytes)
|
|
|
|
Image data is stored interlaced with the even lines first. This offset
|
|
specifies where the first odd-line image data starts.
|
|
|
|
IMAGE DATA
|
|
|
|
Then subtitle image data follows the above control information. Image
|
|
lines are interlaced. That is line 0 is comes first, then line 2, then
|
|
line 4. After all of the even lines, comes line 1, then line 3,
|
|
etc.. The subtitle aspect ratio is not to be scaled. It is independent
|
|
of the aspect ratio of the underlying image which it is to be
|
|
overlayed on top of.
|
|
|
|
The image is encoded using two bits per pixel that select a palette
|
|
entry except that value 0 starts a limited run-length encoding for
|
|
color 0. When 0 is seen, the next two bits encode one less than
|
|
the number of pixels, so we can encode run lengths from 1 to 4. These
|
|
get filled with the color in palette entry 0.
|
|
|
|
The encoding of each line is padded to a whole number of bytes. The
|
|
first field is padded to an even byte length and the complete subtitle
|
|
is padded to a 4-byte multiple that always include one zero byte at
|
|
the end.
|
|
|
|
================
|
|
SUBTITLING TOOLS
|
|
================
|
|
|
|
Philips SVCD tools can create SVCD subtitles, but it only works under
|
|
NT4. It is not that easy to find anymore. (dvd.da.ru, doom9.net or
|
|
similar perhaps?). It can create good subtitled SVCDs. Subtitles are
|
|
created in a text editor. Another tool is called submux. Last version
|
|
I tried doesn't do renumber presentation time stamps properly, but
|
|
many media players (now) can tolerate this.
|
|
|
|
The subtitles you get from tools like "I-author" are not SVCD
|
|
subtitles, they are CVD subtitles. They look similar to DVD subtitles,
|
|
but the run-length encoding (RLE) and command format are different.
|