A library for parsing and manipulating Advanced SubStation Alpha subtitle files.
Project description
python-ass
A library for parsing and manipulating Advanced SubStation Alpha subtitle files.
Documents
Example file: tests/test.ass
You can parse the file:
>>> import ass
>>> with open("tests/test.ass", encoding='utf_8_sig') as f:
... doc = ass.parse(f)
...
Access its meta info:
>>> doc.info
ScriptInfoSection('Script Info', OrderedDict([('ScriptType', 'v4.00+'), ('PlayResX', 500), ('PlayResY', 500)]))
>>> doc.info['PlayResX']
500
Access its styles:
>>> doc.styles
StylesSection('V4+ Styles', [Style(name='Default', fontname='Arial', fontsize=20.0, primary_color=Color(r=0xff, g=0xff, b=0xff, a=0x00), secondary_color=Color(r=0xff, g=0x00, b=0x00, a=0x00), outline_color=Color(r=0x00, g=0x00, b=0x00, a=0x00), back_color=Color(r=0x00, g=0x00, b=0x00, a=0x00), bold=False, italic=False, underline=False, strike_out=False, scale_x=100.0, scale_y=100.0, spacing=0.0, angle=0.0, border_style=1, outline=1.0, shadow=2.0, alignment=5, margin_l=10, margin_r=10, margin_v=10, encoding=1)])
>>> doc.styles[0].fontname
'Arial'
>>> doc.styles[0].primary_color # "color", not "colour"
Color(r=0xff, g=0xff, b=0xff, a=0x00)
Access its event lines:
>>> doc.events
EventsSection('Events', [Dialogue(layer=0, start=datetime.timedelta(0), end=datetime.timedelta(seconds=5), style='Default', name='', margin_l=0, margin_r=0, margin_v=0, effect='', text='{\\3c&H0000FF}this is a test\\N{\\3c&H00FF00}this is a test\\N{\\3c&HFF0000}this is a test'), ...])
>>> doc.events[0].text
'{\\3c&H0000FF}this is a test\\N{\\3c&H00FF00}this is a test\\N{\\3c&HFF0000}this is a test'
Or any other section data:
>>> list(doc.sections.keys())
['Script Info', 'Aegisub Project Garbage', 'Custom Section', 'V4+ Styles', 'Events', 'Aegisub Extradata']
>>> doc.sections['Aegisub Project Garbage']['Scroll Position']
'30'
You can dump everything out into ASS format, too:
>>> doc.events[0].dump()
'0,0:00:00.00,0:00:05.00,Default,,0,0,0,,{\\3c&H0000FF}this is a test\\N{\\3c&H00FF00}this is a test\\N{\\3c&HFF0000}this is a test'
Or maybe the whole file:
>>> with open("out.ass", "w", encoding='utf_8_sig') as f:
... doc.dump_file(f)
...
Tags
For parsing ASS tags, you may want to consider ass-tag-parser
:
https://pypi.org/project/ass-tag-parser/
(on GitHub).
Rendering
The following has been unmaintained for years.
python-ass can use libass for rendering.
First you need to allocate a libass context:
>>> ctx = ass.renderer.Context()
Then you need to convert the ass.document.Document
to a ass.renderer.Track
:
>>> t = ctx.make_track()
>>> t.populate(doc)
Then make a renderer to render the track:
>>> r = ctx.make_renderer()
>>> r.set_fonts(fontconfig_config="/usr/local/etc/fonts/fonts.conf")
>>> r.set_all_sizes((1280, 720))
You can render a frame at a given time:
>>> imgs = r.render_frame(t, timedelta(0))
Example using PIL to render to a bitmap:
>>> im_out = Image.new("RGB", (1280, 720))
>>> im_data = im_out.load()
>>> for img in imgs:
... r, g, b, a = img.rgba
... for y in range(img.h):
... for x in range(img.w):
... a_src = img[x, y] * (256 - a) // 256
... r_dst, g_dst, b_dst = im_data[x + img.dst_x, y + img.dst_y]
... r_out = ((r * a_src) + (r_dst * (256 - a_src))) // 256
... g_out = ((g * a_src) + (g_dst * (256 - a_src))) // 256
... b_out = ((b * a_src) + (b_dst * (256 - a_src))) // 256
... im_data[x + img.dst_x, y + img.dst_y] = (r_out, g_out, b_out)
...
>>> im_out.show()
Sample Rendering (from renderer_test.py
)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file ass-0.5.4.tar.gz
.
File metadata
- Download URL: ass-0.5.4.tar.gz
- Upload date:
- Size: 15.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7b3db1929d975121a3e449f38ce7747bfaa88ea4aa1202cd84c14fa85d3ba5d0 |
|
MD5 | 7f2229cb42fe1e8213110c9279e8ce28 |
|
BLAKE2b-256 | f020f40eb4e64989fdddae3330468e4555f64b7234338b4e02952f3e442f3790 |
File details
Details for the file ass-0.5.4-py3-none-any.whl
.
File metadata
- Download URL: ass-0.5.4-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8da7d606bfed9f655a10611dc542936182b15438da5b9515205334990906e2c8 |
|
MD5 | 8810e8ed261baae2944bbe90acd46fc4 |
|
BLAKE2b-256 | 622d47532f60716fa4f76320358871f3edce28d6c2ce1ae1d1f31306270edf0e |