Add unique style ID
This commit is contained in:
parent
a73be9f624
commit
4bcd19c054
@ -7,6 +7,7 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
import sys
|
import sys
|
||||||
import xml.dom.minidom
|
import xml.dom.minidom
|
||||||
|
|
||||||
@ -194,7 +195,8 @@ CommentFormatMap = {None: None, 'Niconico': ReadCommentsNiconico, 'Acfun': ReadC
|
|||||||
|
|
||||||
|
|
||||||
def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsize, alpha, lifetime, reduced):
|
def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsize, alpha, lifetime, reduced):
|
||||||
WriteASSHead(f, width, height, fontface, fontsize, alpha)
|
styleid = 'Danmaku2ASS_%04x' % random.randint(0, 0xffff)
|
||||||
|
WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid)
|
||||||
rows = [[None]*(height-bottomReserved), [None]*(height-bottomReserved), [None]*(height-bottomReserved)]
|
rows = [[None]*(height-bottomReserved), [None]*(height-bottomReserved), [None]*(height-bottomReserved)]
|
||||||
for i in comments:
|
for i in comments:
|
||||||
row = 0
|
row = 0
|
||||||
@ -203,7 +205,7 @@ def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsi
|
|||||||
freerows = TestFreeRows(rows, i, row, width, height, bottomReserved, lifetime)
|
freerows = TestFreeRows(rows, i, row, width, height, bottomReserved, lifetime)
|
||||||
if freerows >= i[7]:
|
if freerows >= i[7]:
|
||||||
MarkCommentRow(rows, i, row)
|
MarkCommentRow(rows, i, row)
|
||||||
WriteComment(f, i, row, width, height, bottomReserved, fontsize, lifetime)
|
WriteComment(f, i, row, width, height, bottomReserved, fontsize, lifetime, styleid)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
row += freerows or 1
|
row += freerows or 1
|
||||||
@ -211,7 +213,7 @@ def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsi
|
|||||||
if not reduced:
|
if not reduced:
|
||||||
row = FindAlternativeRow(rows, i, height, bottomReserved)
|
row = FindAlternativeRow(rows, i, height, bottomReserved)
|
||||||
MarkCommentRow(rows, i, row)
|
MarkCommentRow(rows, i, row)
|
||||||
WriteComment(f, i, row, width, height, bottomReserved, fontsize, lifetime)
|
WriteComment(f, i, row, width, height, bottomReserved, fontsize, lifetime, styleid)
|
||||||
|
|
||||||
|
|
||||||
def TestFreeRows(rows, c, row, width, height, bottomReserved, lifetime):
|
def TestFreeRows(rows, c, row, width, height, bottomReserved, lifetime):
|
||||||
@ -247,7 +249,7 @@ def MarkCommentRow(rows, c, row):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def WriteASSHead(f, width, height, fontface, fontsize, alpha):
|
def WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid):
|
||||||
f.write(
|
f.write(
|
||||||
'''\ufeff
|
'''\ufeff
|
||||||
[Script Info]
|
[Script Info]
|
||||||
@ -258,15 +260,15 @@ PlayResY: %(height)s
|
|||||||
|
|
||||||
[V4+ Styles]
|
[V4+ Styles]
|
||||||
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
|
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
|
||||||
Style: Default, %(fontface)s, %(fontsize)s, &H%(alpha)02XFFFFFF, &H%(alpha)02XFFFFFF, &H%(alpha)02X000000, &H%(alpha)02X000000, 0, 0, 0, 0, 100, 100, 0.00, 0.00, 1, 1, 0, 7, 20, 20, 20, 0
|
Style: %(styleid)s, %(fontface)s, %(fontsize)s, &H%(alpha)02XFFFFFF, &H%(alpha)02XFFFFFF, &H%(alpha)02X000000, &H%(alpha)02X000000, 0, 0, 0, 0, 100, 100, 0.00, 0.00, 1, 1, 0, 7, 20, 20, 20, 0
|
||||||
|
|
||||||
[Events]
|
[Events]
|
||||||
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
|
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
|
||||||
''' % {'width': width, 'height': height, 'fontface': fontface, 'fontsize': round(fontsize), 'alpha': 255-round(alpha*255)}
|
''' % {'width': width, 'height': height, 'fontface': fontface, 'fontsize': round(fontsize), 'alpha': 255-round(alpha*255), 'styleid': styleid}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def WriteComment(f, c, row, width, height, bottomReserved, fontsize, lifetime):
|
def WriteComment(f, c, row, width, height, bottomReserved, fontsize, lifetime, styleid):
|
||||||
text = c[3].replace('\\', '\\\\').replace('\n', '\\N')
|
text = c[3].replace('\\', '\\\\').replace('\n', '\\N')
|
||||||
if c[4] == 1:
|
if c[4] == 1:
|
||||||
styles = '{\\an8}{\\pos(%(halfwidth)s, %(row)s)}' % {'halfwidth': round(width/2), 'row': row}
|
styles = '{\\an8}{\\pos(%(halfwidth)s, %(row)s)}' % {'halfwidth': round(width/2), 'row': row}
|
||||||
@ -280,7 +282,7 @@ def WriteComment(f, c, row, width, height, bottomReserved, fontsize, lifetime):
|
|||||||
styles += '{\\c&H%02X%02X%02x&}' % (c[5] & 0xff, (c[5] >> 8) & 0xff, (c[5] >> 16) & 0xff)
|
styles += '{\\c&H%02X%02X%02x&}' % (c[5] & 0xff, (c[5] >> 8) & 0xff, (c[5] >> 16) & 0xff)
|
||||||
if c[5] == 0x000000:
|
if c[5] == 0x000000:
|
||||||
styles += '{\\3c&HFFFFFF&}'
|
styles += '{\\3c&HFFFFFF&}'
|
||||||
f.write('Dialogue: 3,%(start)s,%(end)s,Default,,0000,0000,0000,,%(styles)s%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0]+lifetime), 'styles': styles, 'text': text})
|
f.write('Dialogue: 3,%(start)s,%(end)s,%(styleid)s,,0000,0000,0000,,%(styles)s%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0]+lifetime), 'styles': styles, 'text': text, 'styleid': styleid})
|
||||||
|
|
||||||
|
|
||||||
def CalculateLength(s):
|
def CalculateLength(s):
|
||||||
|
Loading…
Reference in New Issue
Block a user