autopep8
This commit is contained in:
parent
73ce323271
commit
ac1b0cfd31
167
danmaku2ass.py
167
danmaku2ass.py
@ -137,12 +137,12 @@ def ReadCommentsNiconico(f, fontsize):
|
|||||||
elif mailstyle == 'shita':
|
elif mailstyle == 'shita':
|
||||||
pos = 2
|
pos = 2
|
||||||
elif mailstyle == 'big':
|
elif mailstyle == 'big':
|
||||||
size = fontsize*1.44
|
size = fontsize * 1.44
|
||||||
elif mailstyle == 'small':
|
elif mailstyle == 'small':
|
||||||
size = fontsize*0.64
|
size = fontsize * 0.64
|
||||||
elif mailstyle in NiconicoColorMap:
|
elif mailstyle in NiconicoColorMap:
|
||||||
color = NiconicoColorMap[mailstyle]
|
color = NiconicoColorMap[mailstyle]
|
||||||
yield (max(int(comment.getAttribute('vpos')), 0)*0.01, int(comment.getAttribute('date')), int(comment.getAttribute('no')), c, pos, color, size, (c.count('\n')+1)*size, CalculateLength(c)*size)
|
yield (max(int(comment.getAttribute('vpos')), 0) * 0.01, int(comment.getAttribute('date')), int(comment.getAttribute('no')), c, pos, color, size, (c.count('\n') + 1) * size, CalculateLength(c) * size)
|
||||||
except (AssertionError, AttributeError, IndexError, TypeError, ValueError):
|
except (AssertionError, AttributeError, IndexError, TypeError, ValueError):
|
||||||
logging.warning(_('Invalid comment: %s') % comment.toxml())
|
logging.warning(_('Invalid comment: %s') % comment.toxml())
|
||||||
continue
|
continue
|
||||||
@ -159,10 +159,10 @@ def ReadCommentsAcfun(f, fontsize):
|
|||||||
p = str(comment['c']).split(',')
|
p = str(comment['c']).split(',')
|
||||||
assert len(p) >= 6
|
assert len(p) >= 6
|
||||||
assert p[2] in ('1', '2', '4', '5', '7')
|
assert p[2] in ('1', '2', '4', '5', '7')
|
||||||
size = int(p[3])*fontsize/25.0
|
size = int(p[3]) * fontsize / 25.0
|
||||||
if p[2] != '7':
|
if p[2] != '7':
|
||||||
c = str(comment['m']).replace('\\r', '\n').replace('\r', '\n')
|
c = str(comment['m']).replace('\\r', '\n').replace('\r', '\n')
|
||||||
yield (float(p[0]), int(p[5]), i, c, {'1': 0, '2': 0, '4': 2, '5': 1}[p[2]], int(p[1]), size, (c.count('\n')+1)*size, CalculateLength(c)*size)
|
yield (float(p[0]), int(p[5]), i, c, {'1': 0, '2': 0, '4': 2, '5': 1}[p[2]], int(p[1]), size, (c.count('\n') + 1) * size, CalculateLength(c) * size)
|
||||||
else:
|
else:
|
||||||
c = dict(json.loads(comment['m']))
|
c = dict(json.loads(comment['m']))
|
||||||
yield (float(p[0]), int(p[5]), i, c, 'acfunpos', int(p[1]), size, 0, 0)
|
yield (float(p[0]), int(p[5]), i, c, 'acfunpos', int(p[1]), size, 0, 0)
|
||||||
@ -182,8 +182,8 @@ def ReadCommentsBilibili(f, fontsize):
|
|||||||
if comment.childNodes.length > 0:
|
if comment.childNodes.length > 0:
|
||||||
if p[1] in ('1', '4', '5', '6'):
|
if p[1] in ('1', '4', '5', '6'):
|
||||||
c = str(comment.childNodes[0].wholeText).replace('/n', '\n')
|
c = str(comment.childNodes[0].wholeText).replace('/n', '\n')
|
||||||
size = int(p[2])*fontsize/25.0
|
size = int(p[2]) * fontsize / 25.0
|
||||||
yield (float(p[0]), int(p[4]), i, c, {'1': 0, '4': 2, '5': 1, '6': 3}[p[1]], int(p[3]), size, (c.count('\n')+1)*size, CalculateLength(c)*size)
|
yield (float(p[0]), int(p[4]), i, c, {'1': 0, '4': 2, '5': 1, '6': 3}[p[1]], int(p[3]), size, (c.count('\n') + 1) * size, CalculateLength(c) * size)
|
||||||
elif p[1] == '7': # positioned comment
|
elif p[1] == '7': # positioned comment
|
||||||
c = str(comment.childNodes[0].wholeText)
|
c = str(comment.childNodes[0].wholeText)
|
||||||
yield (float(p[0]), int(p[4]), i, c, 'bilipos', int(p[3]), int(p[2]), 0, 0)
|
yield (float(p[0]), int(p[4]), i, c, 'bilipos', int(p[3]), int(p[2]), 0, 0)
|
||||||
@ -201,8 +201,8 @@ def ReadCommentsTudou(f, fontsize):
|
|||||||
assert comment['pos'] in (3, 4, 6)
|
assert comment['pos'] in (3, 4, 6)
|
||||||
c = str(comment['data'])
|
c = str(comment['data'])
|
||||||
assert comment['size'] in (0, 1, 2)
|
assert comment['size'] in (0, 1, 2)
|
||||||
size = {0: 0.64, 1: 1, 2: 1.44}[comment['size']]*fontsize
|
size = {0: 0.64, 1: 1, 2: 1.44}[comment['size']] * fontsize
|
||||||
yield (int(comment['replay_time']*0.001), int(comment['commit_time']), i, c, {3: 0, 4: 2, 6: 1}[comment['pos']], int(comment['color']), size, (c.count('\n')+1)*size, CalculateLength(c)*size)
|
yield (int(comment['replay_time'] * 0.001), int(comment['commit_time']), i, c, {3: 0, 4: 2, 6: 1}[comment['pos']], int(comment['color']), size, (c.count('\n') + 1) * size, CalculateLength(c) * size)
|
||||||
except (AssertionError, AttributeError, IndexError, TypeError, ValueError):
|
except (AssertionError, AttributeError, IndexError, TypeError, ValueError):
|
||||||
logging.warning(_('Invalid comment: %r') % comment)
|
logging.warning(_('Invalid comment: %r') % comment)
|
||||||
continue
|
continue
|
||||||
@ -237,8 +237,8 @@ def ReadCommentsMioMio(f, fontsize):
|
|||||||
message = comment.getElementsByTagName('message')[0]
|
message = comment.getElementsByTagName('message')[0]
|
||||||
c = str(message.childNodes[0].wholeText)
|
c = str(message.childNodes[0].wholeText)
|
||||||
pos = 0
|
pos = 0
|
||||||
size = int(message.getAttribute('fontsize'))*fontsize/25.0
|
size = int(message.getAttribute('fontsize')) * fontsize / 25.0
|
||||||
yield (float(comment.getElementsByTagName('playTime')[0].childNodes[0].wholeText), int(calendar.timegm(time.strptime(comment.getElementsByTagName('times')[0].childNodes[0].wholeText, '%Y-%m-%d %H:%M:%S')))-28800, i, c, {'1': 0, '4': 2, '5': 1}[message.getAttribute('mode')], int(message.getAttribute('color')), size, (c.count('\n')+1)*size, CalculateLength(c)*size)
|
yield (float(comment.getElementsByTagName('playTime')[0].childNodes[0].wholeText), int(calendar.timegm(time.strptime(comment.getElementsByTagName('times')[0].childNodes[0].wholeText, '%Y-%m-%d %H:%M:%S'))) - 28800, i, c, {'1': 0, '4': 2, '5': 1}[message.getAttribute('mode')], int(message.getAttribute('color')), size, (c.count('\n') + 1) * size, CalculateLength(c) * size)
|
||||||
except (AssertionError, AttributeError, IndexError, TypeError, ValueError):
|
except (AssertionError, AttributeError, IndexError, TypeError, ValueError):
|
||||||
logging.warning(_('Invalid comment: %s') % comment.toxml())
|
logging.warning(_('Invalid comment: %s') % comment.toxml())
|
||||||
continue
|
continue
|
||||||
@ -248,20 +248,20 @@ CommentFormatMap = {'Niconico': ReadCommentsNiconico, 'Acfun': ReadCommentsAcfun
|
|||||||
|
|
||||||
|
|
||||||
def WriteCommentBilibiliPositioned(f, c, width, height, styleid):
|
def WriteCommentBilibiliPositioned(f, c, width, height, styleid):
|
||||||
#BiliPlayerSize = (512, 384) # Bilibili player version 2010
|
# BiliPlayerSize = (512, 384) # Bilibili player version 2010
|
||||||
#BiliPlayerSize = (540, 384) # Bilibili player version 2012
|
# BiliPlayerSize = (540, 384) # Bilibili player version 2012
|
||||||
BiliPlayerSize = (672, 438) # Bilibili player version 2014
|
BiliPlayerSize = (672, 438) # Bilibili player version 2014
|
||||||
ZoomFactor = GetZoomFactor(BiliPlayerSize, (width, height))
|
ZoomFactor = GetZoomFactor(BiliPlayerSize, (width, height))
|
||||||
|
|
||||||
def GetPosition(InputPos, isHeight):
|
def GetPosition(InputPos, isHeight):
|
||||||
isHeight = int(isHeight) # True -> 1
|
isHeight = int(isHeight) # True -> 1
|
||||||
if isinstance(InputPos, int):
|
if isinstance(InputPos, int):
|
||||||
return ZoomFactor[0]*InputPos+ZoomFactor[isHeight+1]
|
return ZoomFactor[0] * InputPos + ZoomFactor[isHeight + 1]
|
||||||
elif isinstance(InputPos, float):
|
elif isinstance(InputPos, float):
|
||||||
if InputPos > 1:
|
if InputPos > 1:
|
||||||
return ZoomFactor[0]*InputPos+ZoomFactor[isHeight+1]
|
return ZoomFactor[0] * InputPos + ZoomFactor[isHeight + 1]
|
||||||
else:
|
else:
|
||||||
return BiliPlayerSize[isHeight]*ZoomFactor[0]*InputPos+ZoomFactor[isHeight+1]
|
return BiliPlayerSize[isHeight] * ZoomFactor[0] * InputPos + ZoomFactor[isHeight + 1]
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
InputPos = int(InputPos)
|
InputPos = int(InputPos)
|
||||||
@ -283,30 +283,30 @@ def WriteCommentBilibiliPositioned(f, c, width, height, styleid):
|
|||||||
alpha = safe_list(str(comment_args.get(2, '1')).split('-'))
|
alpha = safe_list(str(comment_args.get(2, '1')).split('-'))
|
||||||
from_alpha = float(alpha.get(0, 1))
|
from_alpha = float(alpha.get(0, 1))
|
||||||
to_alpha = float(alpha.get(1, from_alpha))
|
to_alpha = float(alpha.get(1, from_alpha))
|
||||||
from_alpha = 255-round(from_alpha*255)
|
from_alpha = 255 - round(from_alpha * 255)
|
||||||
to_alpha = 255-round(to_alpha*255)
|
to_alpha = 255 - round(to_alpha * 255)
|
||||||
rotate_z = int(comment_args.get(5, 0))
|
rotate_z = int(comment_args.get(5, 0))
|
||||||
rotate_y = int(comment_args.get(6, 0))
|
rotate_y = int(comment_args.get(6, 0))
|
||||||
lifetime = float(comment_args.get(3, 4500))
|
lifetime = float(comment_args.get(3, 4500))
|
||||||
duration = int(comment_args.get(9, lifetime*1000))
|
duration = int(comment_args.get(9, lifetime * 1000))
|
||||||
delay = int(comment_args.get(10, 0))
|
delay = int(comment_args.get(10, 0))
|
||||||
fontface = comment_args.get(12)
|
fontface = comment_args.get(12)
|
||||||
isborder = comment_args.get(11, 'true')
|
isborder = comment_args.get(11, 'true')
|
||||||
from_rotarg = ConvertFlashRotation(rotate_y, rotate_z, from_x, from_y, width, height)
|
from_rotarg = ConvertFlashRotation(rotate_y, rotate_z, from_x, from_y, width, height)
|
||||||
to_rotarg = ConvertFlashRotation(rotate_y, rotate_z, to_x, to_y, width, height)
|
to_rotarg = ConvertFlashRotation(rotate_y, rotate_z, to_x, to_y, width, height)
|
||||||
styles = ['\\org(%d, %d)' % (width/2, height/2)]
|
styles = ['\\org(%d, %d)' % (width / 2, height / 2)]
|
||||||
if from_rotarg[0:2] == to_rotarg[0:2]:
|
if from_rotarg[0:2] == to_rotarg[0:2]:
|
||||||
styles.append('\\pos(%.0f, %.0f)' % (from_rotarg[0:2]))
|
styles.append('\\pos(%.0f, %.0f)' % (from_rotarg[0:2]))
|
||||||
else:
|
else:
|
||||||
styles.append('\\move(%.0f, %.0f, %.0f, %.0f, %.0f, %.0f)' % (from_rotarg[0:2]+to_rotarg[0:2]+(delay, delay+duration)))
|
styles.append('\\move(%.0f, %.0f, %.0f, %.0f, %.0f, %.0f)' % (from_rotarg[0:2] + to_rotarg[0:2] + (delay, delay + duration)))
|
||||||
styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (from_rotarg[2:7]))
|
styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (from_rotarg[2:7]))
|
||||||
if (from_x, from_y) != (to_x, to_y):
|
if (from_x, from_y) != (to_x, to_y):
|
||||||
styles.append('\\t(%d, %d, ' % (delay, delay+duration))
|
styles.append('\\t(%d, %d, ' % (delay, delay + duration))
|
||||||
styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (to_rotarg[2:7]))
|
styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (to_rotarg[2:7]))
|
||||||
styles.append(')')
|
styles.append(')')
|
||||||
if fontface:
|
if fontface:
|
||||||
styles.append('\\fn%s' % ASSEscape(fontface))
|
styles.append('\\fn%s' % ASSEscape(fontface))
|
||||||
styles.append('\\fs%.0f' % (c[6]*ZoomFactor[0]))
|
styles.append('\\fs%.0f' % (c[6] * ZoomFactor[0]))
|
||||||
if c[5] != 0xffffff:
|
if c[5] != 0xffffff:
|
||||||
styles.append('\\c&H%s&' % ConvertColor(c[5]))
|
styles.append('\\c&H%s&' % ConvertColor(c[5]))
|
||||||
if c[5] == 0x000000:
|
if c[5] == 0x000000:
|
||||||
@ -314,14 +314,14 @@ def WriteCommentBilibiliPositioned(f, c, width, height, styleid):
|
|||||||
if from_alpha == to_alpha:
|
if from_alpha == to_alpha:
|
||||||
styles.append('\\alpha&H%02X' % from_alpha)
|
styles.append('\\alpha&H%02X' % from_alpha)
|
||||||
elif (from_alpha, to_alpha) == (255, 0):
|
elif (from_alpha, to_alpha) == (255, 0):
|
||||||
styles.append('\\fad(%.0f,0)' % (lifetime*1000))
|
styles.append('\\fad(%.0f,0)' % (lifetime * 1000))
|
||||||
elif (from_alpha, to_alpha) == (0, 255):
|
elif (from_alpha, to_alpha) == (0, 255):
|
||||||
styles.append('\\fad(0, %.0f)' % (lifetime*1000))
|
styles.append('\\fad(0, %.0f)' % (lifetime * 1000))
|
||||||
else:
|
else:
|
||||||
styles.append('\\fade(%(from_alpha)d, %(to_alpha)d, %(to_alpha)d, 0, %(end_time).0f, %(end_time).0f, %(end_time).0f)' % {'from_alpha': from_alpha, 'to_alpha': to_alpha, 'end_time': lifetime*1000})
|
styles.append('\\fade(%(from_alpha)d, %(to_alpha)d, %(to_alpha)d, 0, %(end_time).0f, %(end_time).0f, %(end_time).0f)' % {'from_alpha': from_alpha, 'to_alpha': to_alpha, 'end_time': lifetime * 1000})
|
||||||
if isborder == 'false':
|
if isborder == 'false':
|
||||||
styles.append('\\bord0')
|
styles.append('\\bord0')
|
||||||
f.write('Dialogue: -1,%(start)s,%(end)s,%(styleid)s,,0,0,0,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0]+lifetime), 'styles': ''.join(styles), 'text': text, 'styleid': styleid})
|
f.write('Dialogue: -1,%(start)s,%(end)s,%(styleid)s,,0,0,0,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0] + lifetime), 'styles': ''.join(styles), 'text': text, 'styleid': styleid})
|
||||||
except (IndexError, ValueError) as e:
|
except (IndexError, ValueError) as e:
|
||||||
try:
|
try:
|
||||||
logging.warning(_('Invalid comment: %r') % c[3])
|
logging.warning(_('Invalid comment: %r') % c[3])
|
||||||
@ -335,7 +335,7 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid):
|
|||||||
|
|
||||||
def GetPosition(InputPos, isHeight):
|
def GetPosition(InputPos, isHeight):
|
||||||
isHeight = int(isHeight) # True -> 1
|
isHeight = int(isHeight) # True -> 1
|
||||||
return AcfunPlayerSize[isHeight]*ZoomFactor[0]*InputPos*0.001+ZoomFactor[isHeight+1]
|
return AcfunPlayerSize[isHeight] * ZoomFactor[0] * InputPos * 0.001 + ZoomFactor[isHeight + 1]
|
||||||
|
|
||||||
def GetTransformStyles(x=None, y=None, scale_x=None, scale_y=None, rotate_z=None, rotate_y=None, color=None, alpha=None):
|
def GetTransformStyles(x=None, y=None, scale_x=None, scale_y=None, rotate_z=None, rotate_y=None, color=None, alpha=None):
|
||||||
styles = []
|
styles = []
|
||||||
@ -349,18 +349,18 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid):
|
|||||||
scale_x = 1
|
scale_x = 1
|
||||||
if scale_y is None:
|
if scale_y is None:
|
||||||
scale_y = 1
|
scale_y = 1
|
||||||
styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (rotarg[2:5]+(rotarg[5]*scale_x, rotarg[6]*scale_y)))
|
styles.append('\\frx%.0f\\fry%.0f\\frz%.0f\\fscx%.0f\\fscy%.0f' % (rotarg[2:5] + (rotarg[5] * scale_x, rotarg[6] * scale_y)))
|
||||||
else:
|
else:
|
||||||
if scale_x is not None:
|
if scale_x is not None:
|
||||||
styles.append('\\fscx%.0f' % (scale_x*100))
|
styles.append('\\fscx%.0f' % (scale_x * 100))
|
||||||
if scale_y is not None:
|
if scale_y is not None:
|
||||||
styles.append('\\fscy%.0f' % (scale_y*100))
|
styles.append('\\fscy%.0f' % (scale_y * 100))
|
||||||
if color is not None:
|
if color is not None:
|
||||||
styles.append('\\c&H%s&' % ConvertColor(color))
|
styles.append('\\c&H%s&' % ConvertColor(color))
|
||||||
if color == 0x000000:
|
if color == 0x000000:
|
||||||
styles.append('\\3c&HFFFFFF&')
|
styles.append('\\3c&HFFFFFF&')
|
||||||
if alpha is not None:
|
if alpha is not None:
|
||||||
alpha = 255-round(alpha*255)
|
alpha = 255 - round(alpha * 255)
|
||||||
styles.append('\\alpha&H%02X' % alpha)
|
styles.append('\\alpha&H%02X' % alpha)
|
||||||
return out_x, out_y, styles
|
return out_x, out_y, styles
|
||||||
|
|
||||||
@ -371,7 +371,7 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid):
|
|||||||
try:
|
try:
|
||||||
comment_args = c[3]
|
comment_args = c[3]
|
||||||
text = ASSEscape(str(comment_args['n']).replace('\r', '\n'))
|
text = ASSEscape(str(comment_args['n']).replace('\r', '\n'))
|
||||||
common_styles = ['\org(%d, %d)' % (width/2, height/2)]
|
common_styles = ['\org(%d, %d)' % (width / 2, height / 2)]
|
||||||
anchor = {0: 7, 1: 8, 2: 9, 3: 4, 4: 5, 5: 6, 6: 1, 7: 2, 8: 3}.get(comment_args.get('c', 0), 7)
|
anchor = {0: 7, 1: 8, 2: 9, 3: 4, 4: 5, 5: 6, 6: 1, 7: 2, 8: 3}.get(comment_args.get('c', 0), 7)
|
||||||
if anchor != 7:
|
if anchor != 7:
|
||||||
common_styles.append('\\an%s' % anchor)
|
common_styles.append('\\an%s' % anchor)
|
||||||
@ -384,7 +384,7 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid):
|
|||||||
fontbold = bool(font.get('b'))
|
fontbold = bool(font.get('b'))
|
||||||
if fontbold:
|
if fontbold:
|
||||||
common_styles.append('\\b1')
|
common_styles.append('\\b1')
|
||||||
common_styles.append('\\fs%.0f' % (c[6]*ZoomFactor[0]))
|
common_styles.append('\\fs%.0f' % (c[6] * ZoomFactor[0]))
|
||||||
isborder = bool(comment_args.get('b', True))
|
isborder = bool(comment_args.get('b', True))
|
||||||
if not isborder:
|
if not isborder:
|
||||||
common_styles.append('\\bord0')
|
common_styles.append('\\bord0')
|
||||||
@ -401,7 +401,7 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid):
|
|||||||
action_time = float(comment_args.get('l', 3.0))
|
action_time = float(comment_args.get('l', 3.0))
|
||||||
actions = list(comment_args.get('z', []))
|
actions = list(comment_args.get('z', []))
|
||||||
to_out_x, to_out_y, transform_styles = GetTransformStyles(to_x, to_y, to_scale_x, to_scale_y, to_rotate_z, to_rotate_y, to_color, to_alpha)
|
to_out_x, to_out_y, transform_styles = GetTransformStyles(to_x, to_y, to_scale_x, to_scale_y, to_rotate_z, to_rotate_y, to_color, to_alpha)
|
||||||
FlushCommentLine(f, text, common_styles+['\\pos(%.0f, %.0f)' % (to_out_x, to_out_y)]+transform_styles, c[0]+from_time, c[0]+from_time+action_time, styleid)
|
FlushCommentLine(f, text, common_styles + ['\\pos(%.0f, %.0f)' % (to_out_x, to_out_y)] + transform_styles, c[0] + from_time, c[0] + from_time + action_time, styleid)
|
||||||
action_styles = transform_styles
|
action_styles = transform_styles
|
||||||
for action in actions:
|
for action in actions:
|
||||||
action = dict(action)
|
action = dict(action)
|
||||||
@ -434,11 +434,11 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid):
|
|||||||
pos_style = '\\pos(%.0f, %.0f)' % (to_out_x, to_out_y)
|
pos_style = '\\pos(%.0f, %.0f)' % (to_out_x, to_out_y)
|
||||||
else:
|
else:
|
||||||
pos_style = '\\move(%.0f, %.0f, %.0f, %.0f)' % (from_out_x, from_out_y, to_out_x, to_out_y)
|
pos_style = '\\move(%.0f, %.0f, %.0f, %.0f)' % (from_out_x, from_out_y, to_out_x, to_out_y)
|
||||||
styles = common_styles+transform_styles
|
styles = common_styles + transform_styles
|
||||||
styles.append(pos_style)
|
styles.append(pos_style)
|
||||||
if action_styles:
|
if action_styles:
|
||||||
styles.append('\\t(%s)' % (''.join(action_styles)))
|
styles.append('\\t(%s)' % (''.join(action_styles)))
|
||||||
FlushCommentLine(f, text, styles, c[0]+from_time, c[0]+from_time+action_time, styleid)
|
FlushCommentLine(f, text, styles, c[0] + from_time, c[0] + from_time + action_time, styleid)
|
||||||
except (IndexError, ValueError) as e:
|
except (IndexError, ValueError) as e:
|
||||||
logging.warning(_('Invalid comment: %r') % c[3])
|
logging.warning(_('Invalid comment: %r') % c[3])
|
||||||
|
|
||||||
@ -453,16 +453,16 @@ def GetZoomFactor(SourceSize, TargetSize):
|
|||||||
pass
|
pass
|
||||||
GetZoomFactor.Cached_Size = (SourceSize, TargetSize)
|
GetZoomFactor.Cached_Size = (SourceSize, TargetSize)
|
||||||
try:
|
try:
|
||||||
SourceAspect = SourceSize[0]/SourceSize[1]
|
SourceAspect = SourceSize[0] / SourceSize[1]
|
||||||
TargetAspect = TargetSize[0]/TargetSize[1]
|
TargetAspect = TargetSize[0] / TargetSize[1]
|
||||||
if TargetAspect < SourceAspect: # narrower
|
if TargetAspect < SourceAspect: # narrower
|
||||||
ScaleFactor = TargetSize[0]/SourceSize[0]
|
ScaleFactor = TargetSize[0] / SourceSize[0]
|
||||||
GetZoomFactor.Cached_Result = (ScaleFactor, 0, (TargetSize[1]-TargetSize[0]/SourceAspect)/2)
|
GetZoomFactor.Cached_Result = (ScaleFactor, 0, (TargetSize[1] - TargetSize[0] / SourceAspect) / 2)
|
||||||
elif TargetAspect > SourceAspect: # wider
|
elif TargetAspect > SourceAspect: # wider
|
||||||
ScaleFactor = TargetSize[1]/SourceSize[1]
|
ScaleFactor = TargetSize[1] / SourceSize[1]
|
||||||
GetZoomFactor.Cached_Result = (ScaleFactor, (TargetSize[0]-TargetSize[1]*SourceAspect)/2, 0)
|
GetZoomFactor.Cached_Result = (ScaleFactor, (TargetSize[0] - TargetSize[1] * SourceAspect) / 2, 0)
|
||||||
else:
|
else:
|
||||||
GetZoomFactor.Cached_Result = (TargetSize[0]/SourceSize[0], 0, 0)
|
GetZoomFactor.Cached_Result = (TargetSize[0] / SourceSize[0], 0, 0)
|
||||||
return GetZoomFactor.Cached_Result
|
return GetZoomFactor.Cached_Result
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError:
|
||||||
GetZoomFactor.Cached_Result = (1, 0, 0)
|
GetZoomFactor.Cached_Result = (1, 0, 0)
|
||||||
@ -476,7 +476,7 @@ def GetZoomFactor(SourceSize, TargetSize):
|
|||||||
# Result: (transX, transY, rotX, rotY, rotZ, scaleX, scaleY)
|
# Result: (transX, transY, rotX, rotY, rotZ, scaleX, scaleY)
|
||||||
def ConvertFlashRotation(rotY, rotZ, X, Y, width, height):
|
def ConvertFlashRotation(rotY, rotZ, X, Y, width, height):
|
||||||
def WrapAngle(deg):
|
def WrapAngle(deg):
|
||||||
return 180-((180-deg) % 360)
|
return 180 - ((180 - deg) % 360)
|
||||||
rotY = WrapAngle(rotY)
|
rotY = WrapAngle(rotY)
|
||||||
rotZ = WrapAngle(rotZ)
|
rotZ = WrapAngle(rotZ)
|
||||||
if rotY in (90, -90):
|
if rotY in (90, -90):
|
||||||
@ -485,37 +485,37 @@ def ConvertFlashRotation(rotY, rotZ, X, Y, width, height):
|
|||||||
outX = 0
|
outX = 0
|
||||||
outY = -rotY # Positive value means clockwise in Flash
|
outY = -rotY # Positive value means clockwise in Flash
|
||||||
outZ = -rotZ
|
outZ = -rotZ
|
||||||
rotY *= math.pi/180.0
|
rotY *= math.pi / 180.0
|
||||||
rotZ *= math.pi/180.0
|
rotZ *= math.pi / 180.0
|
||||||
else:
|
else:
|
||||||
rotY *= math.pi/180.0
|
rotY *= math.pi / 180.0
|
||||||
rotZ *= math.pi/180.0
|
rotZ *= math.pi / 180.0
|
||||||
outY = math.atan2(-math.sin(rotY)*math.cos(rotZ), math.cos(rotY))*180/math.pi
|
outY = math.atan2(-math.sin(rotY) * math.cos(rotZ), math.cos(rotY)) * 180 / math.pi
|
||||||
outZ = math.atan2(-math.cos(rotY)*math.sin(rotZ), math.cos(rotZ))*180/math.pi
|
outZ = math.atan2(-math.cos(rotY) * math.sin(rotZ), math.cos(rotZ)) * 180 / math.pi
|
||||||
outX = math.asin(math.sin(rotY)*math.sin(rotZ))*180/math.pi
|
outX = math.asin(math.sin(rotY) * math.sin(rotZ)) * 180 / math.pi
|
||||||
trX = (X*math.cos(rotZ)+Y*math.sin(rotZ))/math.cos(rotY)+(1-math.cos(rotZ)/math.cos(rotY))*width/2-math.sin(rotZ)/math.cos(rotY)*height/2
|
trX = (X * math.cos(rotZ) + Y * math.sin(rotZ)) / math.cos(rotY) + (1 - math.cos(rotZ) / math.cos(rotY)) * width / 2 - math.sin(rotZ) / math.cos(rotY) * height / 2
|
||||||
trY = Y*math.cos(rotZ)-X*math.sin(rotZ)+math.sin(rotZ)*width/2+(1-math.cos(rotZ))*height/2
|
trY = Y * math.cos(rotZ) - X * math.sin(rotZ) + math.sin(rotZ) * width / 2 + (1 - math.cos(rotZ)) * height / 2
|
||||||
trZ = (trX-width/2)*math.sin(rotY)
|
trZ = (trX - width / 2) * math.sin(rotY)
|
||||||
FOV = width*math.tan(2*math.pi/9.0)/2
|
FOV = width * math.tan(2 * math.pi / 9.0) / 2
|
||||||
try:
|
try:
|
||||||
scaleXY = FOV/(FOV+trZ)
|
scaleXY = FOV / (FOV + trZ)
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError:
|
||||||
logging.error('Rotation makes object behind the camera: trZ == %.0f' % trZ)
|
logging.error('Rotation makes object behind the camera: trZ == %.0f' % trZ)
|
||||||
scaleXY = 1
|
scaleXY = 1
|
||||||
trX = (trX-width/2)*scaleXY+width/2
|
trX = (trX - width / 2) * scaleXY + width / 2
|
||||||
trY = (trY-height/2)*scaleXY+height/2
|
trY = (trY - height / 2) * scaleXY + height / 2
|
||||||
if scaleXY < 0:
|
if scaleXY < 0:
|
||||||
scaleXY = -scaleXY
|
scaleXY = -scaleXY
|
||||||
outX += 180
|
outX += 180
|
||||||
outY += 180
|
outY += 180
|
||||||
logging.error('Rotation makes object behind the camera: trZ == %.0f < %.0f' % (trZ, FOV))
|
logging.error('Rotation makes object behind the camera: trZ == %.0f < %.0f' % (trZ, FOV))
|
||||||
return (trX, trY, WrapAngle(outX), WrapAngle(outY), WrapAngle(outZ), scaleXY*100, scaleXY*100)
|
return (trX, trY, WrapAngle(outX), WrapAngle(outY), WrapAngle(outZ), scaleXY * 100, scaleXY * 100)
|
||||||
|
|
||||||
|
|
||||||
def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsize, alpha, duration_marquee, duration_still, filter_regex, reduced, progress_callback):
|
def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsize, alpha, duration_marquee, duration_still, filter_regex, reduced, progress_callback):
|
||||||
styleid = 'Danmaku2ASS_%04x' % random.randint(0, 0xffff)
|
styleid = 'Danmaku2ASS_%04x' % random.randint(0, 0xffff)
|
||||||
WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid)
|
WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid)
|
||||||
rows = [[None]*(height-bottomReserved+1) for i in range(4)]
|
rows = [[None] * (height - bottomReserved + 1) for i in range(4)]
|
||||||
for idx, i in enumerate(comments):
|
for idx, i in enumerate(comments):
|
||||||
if progress_callback and idx % 1000 == 0:
|
if progress_callback and idx % 1000 == 0:
|
||||||
progress_callback(idx, len(comments))
|
progress_callback(idx, len(comments))
|
||||||
@ -523,7 +523,7 @@ def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsi
|
|||||||
if filter_regex and filter_regex.search(i[3]):
|
if filter_regex and filter_regex.search(i[3]):
|
||||||
continue
|
continue
|
||||||
row = 0
|
row = 0
|
||||||
rowmax = height-bottomReserved-i[7]
|
rowmax = height - bottomReserved - i[7]
|
||||||
while row <= rowmax:
|
while row <= rowmax:
|
||||||
freerows = TestFreeRows(rows, i, row, width, height, bottomReserved, duration_marquee, duration_still)
|
freerows = TestFreeRows(rows, i, row, width, height, bottomReserved, duration_marquee, duration_still)
|
||||||
if freerows >= i[7]:
|
if freerows >= i[7]:
|
||||||
@ -549,26 +549,26 @@ def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsi
|
|||||||
|
|
||||||
def TestFreeRows(rows, c, row, width, height, bottomReserved, duration_marquee, duration_still):
|
def TestFreeRows(rows, c, row, width, height, bottomReserved, duration_marquee, duration_still):
|
||||||
res = 0
|
res = 0
|
||||||
rowmax = height-bottomReserved
|
rowmax = height - bottomReserved
|
||||||
targetRow = None
|
targetRow = None
|
||||||
if c[4] in (1, 2):
|
if c[4] in (1, 2):
|
||||||
while row < rowmax and res < c[7]:
|
while row < rowmax and res < c[7]:
|
||||||
if targetRow != rows[c[4]][row]:
|
if targetRow != rows[c[4]][row]:
|
||||||
targetRow = rows[c[4]][row]
|
targetRow = rows[c[4]][row]
|
||||||
if targetRow and targetRow[0]+duration_still > c[0]:
|
if targetRow and targetRow[0] + duration_still > c[0]:
|
||||||
break
|
break
|
||||||
row += 1
|
row += 1
|
||||||
res += 1
|
res += 1
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
thresholdTime = c[0]-duration_marquee*(1-width/(c[8]+width))
|
thresholdTime = c[0] - duration_marquee * (1 - width / (c[8] + width))
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError:
|
||||||
thresholdTime = c[0]-duration_marquee
|
thresholdTime = c[0] - duration_marquee
|
||||||
while row < rowmax and res < c[7]:
|
while row < rowmax and res < c[7]:
|
||||||
if targetRow != rows[c[4]][row]:
|
if targetRow != rows[c[4]][row]:
|
||||||
targetRow = rows[c[4]][row]
|
targetRow = rows[c[4]][row]
|
||||||
try:
|
try:
|
||||||
if targetRow and (targetRow[0] > thresholdTime or targetRow[0]+targetRow[8]*duration_marquee/(targetRow[8]+width) > c[0]):
|
if targetRow and (targetRow[0] > thresholdTime or targetRow[0] + targetRow[8] * duration_marquee / (targetRow[8] + width) > c[0]):
|
||||||
break
|
break
|
||||||
except ZeroDivisionError:
|
except ZeroDivisionError:
|
||||||
pass
|
pass
|
||||||
@ -579,7 +579,7 @@ def TestFreeRows(rows, c, row, width, height, bottomReserved, duration_marquee,
|
|||||||
|
|
||||||
def FindAlternativeRow(rows, c, height, bottomReserved):
|
def FindAlternativeRow(rows, c, height, bottomReserved):
|
||||||
res = 0
|
res = 0
|
||||||
for row in range(height-bottomReserved-math.ceil(c[7])):
|
for row in range(height - bottomReserved - math.ceil(c[7])):
|
||||||
if not rows[c[4]][row]:
|
if not rows[c[4]][row]:
|
||||||
return row
|
return row
|
||||||
elif rows[c[4]][row][0] < rows[c[4]][res][0]:
|
elif rows[c[4]][row][0] < rows[c[4]][res][0]:
|
||||||
@ -589,7 +589,7 @@ def FindAlternativeRow(rows, c, height, bottomReserved):
|
|||||||
|
|
||||||
def MarkCommentRow(rows, c, row):
|
def MarkCommentRow(rows, c, row):
|
||||||
try:
|
try:
|
||||||
for i in range(row, row+math.ceil(c[7])):
|
for i in range(row, row + math.ceil(c[7])):
|
||||||
rows[c[4]][i] = c
|
rows[c[4]][i] = c
|
||||||
except IndexError:
|
except IndexError:
|
||||||
pass
|
pass
|
||||||
@ -597,7 +597,7 @@ def MarkCommentRow(rows, c, row):
|
|||||||
|
|
||||||
def WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid):
|
def WriteASSHead(f, width, height, fontface, fontsize, alpha, styleid):
|
||||||
f.write(
|
f.write(
|
||||||
'''[Script Info]
|
'''[Script Info]
|
||||||
; Script generated by Danmaku2ASS
|
; Script generated by Danmaku2ASS
|
||||||
; https://github.com/m13253/danmaku2ass
|
; https://github.com/m13253/danmaku2ass
|
||||||
Script Updated By: Danmaku2ASS (https://github.com/m13253/danmaku2ass)
|
Script Updated By: Danmaku2ASS (https://github.com/m13253/danmaku2ass)
|
||||||
@ -616,7 +616,7 @@ Style: %(styleid)s, %(fontface)s, %(fontsize).0f, &H%(alpha)02XFFFFFF, &H%(alpha
|
|||||||
|
|
||||||
[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': fontsize, 'alpha': 255-round(alpha*255), 'outline': max(fontsize/25.0, 1), 'styleid': styleid}
|
''' % {'width': width, 'height': height, 'fontface': fontface, 'fontsize': fontsize, 'alpha': 255 - round(alpha * 255), 'outline': max(fontsize / 25.0, 1), 'styleid': styleid}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -624,10 +624,10 @@ def WriteComment(f, c, row, width, height, bottomReserved, fontsize, duration_ma
|
|||||||
text = ASSEscape(c[3])
|
text = ASSEscape(c[3])
|
||||||
styles = []
|
styles = []
|
||||||
if c[4] == 1:
|
if c[4] == 1:
|
||||||
styles.append('\\an8\\pos(%(halfwidth)d, %(row)d)' % {'halfwidth': width/2, 'row': row})
|
styles.append('\\an8\\pos(%(halfwidth)d, %(row)d)' % {'halfwidth': width / 2, 'row': row})
|
||||||
duration = duration_still
|
duration = duration_still
|
||||||
elif c[4] == 2:
|
elif c[4] == 2:
|
||||||
styles.append('\\an2\\pos(%(halfwidth)d, %(row)d)' % {'halfwidth': width/2, 'row': ConvertType2(row, height, bottomReserved)})
|
styles.append('\\an2\\pos(%(halfwidth)d, %(row)d)' % {'halfwidth': width / 2, 'row': ConvertType2(row, height, bottomReserved)})
|
||||||
duration = duration_still
|
duration = duration_still
|
||||||
elif c[4] == 3:
|
elif c[4] == 3:
|
||||||
styles.append('\\move(%(neglen)d, %(row)d, %(width)d, %(row)d)' % {'width': width, 'row': row, 'neglen': -math.ceil(c[8])})
|
styles.append('\\move(%(neglen)d, %(row)d, %(width)d, %(row)d)' % {'width': width, 'row': row, 'neglen': -math.ceil(c[8])})
|
||||||
@ -635,13 +635,13 @@ def WriteComment(f, c, row, width, height, bottomReserved, fontsize, duration_ma
|
|||||||
else:
|
else:
|
||||||
styles.append('\\move(%(width)d, %(row)d, %(neglen)d, %(row)d)' % {'width': width, 'row': row, 'neglen': -math.ceil(c[8])})
|
styles.append('\\move(%(width)d, %(row)d, %(neglen)d, %(row)d)' % {'width': width, 'row': row, 'neglen': -math.ceil(c[8])})
|
||||||
duration = duration_marquee
|
duration = duration_marquee
|
||||||
if not (-1 < c[6]-fontsize < 1):
|
if not (-1 < c[6] - fontsize < 1):
|
||||||
styles.append('\\fs%.0f' % c[6])
|
styles.append('\\fs%.0f' % c[6])
|
||||||
if c[5] != 0xffffff:
|
if c[5] != 0xffffff:
|
||||||
styles.append('\\c&H%s&' % ConvertColor(c[5]))
|
styles.append('\\c&H%s&' % ConvertColor(c[5]))
|
||||||
if c[5] == 0x000000:
|
if c[5] == 0x000000:
|
||||||
styles.append('\\3c&HFFFFFF&')
|
styles.append('\\3c&HFFFFFF&')
|
||||||
f.write('Dialogue: 2,%(start)s,%(end)s,%(styleid)s,,0000,0000,0000,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0]+duration), 'styles': ''.join(styles), 'text': text, 'styleid': styleid})
|
f.write('Dialogue: 2,%(start)s,%(end)s,%(styleid)s,,0000,0000,0000,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(c[0]), 'end': ConvertTimestamp(c[0] + duration), 'styles': ''.join(styles), 'text': text, 'styleid': styleid})
|
||||||
|
|
||||||
|
|
||||||
def ASSEscape(s):
|
def ASSEscape(s):
|
||||||
@ -651,9 +651,9 @@ def ASSEscape(s):
|
|||||||
if slen == len(sstrip):
|
if slen == len(sstrip):
|
||||||
return s
|
return s
|
||||||
else:
|
else:
|
||||||
llen = slen-len(s.lstrip(' '))
|
llen = slen - len(s.lstrip(' '))
|
||||||
rlen = slen-len(s.rstrip(' '))
|
rlen = slen - len(s.rstrip(' '))
|
||||||
return ''.join(('\u2007'*llen, sstrip, '\u2007'*rlen))
|
return ''.join(('\u2007' * llen, sstrip, '\u2007' * rlen))
|
||||||
return '\\N'.join((ReplaceLeadingSpace(i) or ' ' for i in str(s).replace('\\', '\\\\').replace('{', '\\{').replace('}', '\\}').split('\n')))
|
return '\\N'.join((ReplaceLeadingSpace(i) or ' ' for i in str(s).replace('\\', '\\\\').replace('{', '\\{').replace('}', '\\}').split('\n')))
|
||||||
|
|
||||||
|
|
||||||
@ -662,7 +662,7 @@ def CalculateLength(s):
|
|||||||
|
|
||||||
|
|
||||||
def ConvertTimestamp(timestamp):
|
def ConvertTimestamp(timestamp):
|
||||||
timestamp = round(timestamp*100.0)
|
timestamp = round(timestamp * 100.0)
|
||||||
hour, minute = divmod(timestamp, 360000)
|
hour, minute = divmod(timestamp, 360000)
|
||||||
minute, second = divmod(minute, 6000)
|
minute, second = divmod(minute, 6000)
|
||||||
second, centsecond = divmod(second, 100)
|
second, centsecond = divmod(second, 100)
|
||||||
@ -682,14 +682,14 @@ def ConvertColor(RGB, width=1280, height=576):
|
|||||||
else: # VobSub always uses BT.601 colorspace, convert to BT.709
|
else: # VobSub always uses BT.601 colorspace, convert to BT.709
|
||||||
ClipByte = lambda x: 255 if x > 255 else 0 if x < 0 else round(x)
|
ClipByte = lambda x: 255 if x > 255 else 0 if x < 0 else round(x)
|
||||||
return '%02X%02X%02X' % (
|
return '%02X%02X%02X' % (
|
||||||
ClipByte(R*0.00956384088080656+G*0.03217254540203729+B*0.95826361371715607),
|
ClipByte(R * 0.00956384088080656 + G * 0.03217254540203729 + B * 0.95826361371715607),
|
||||||
ClipByte(R*-0.10493933142075390+G*1.17231478191855154+B*-0.06737545049779757),
|
ClipByte(R * -0.10493933142075390 + G * 1.17231478191855154 + B * -0.06737545049779757),
|
||||||
ClipByte(R*0.91348912373987645+G*0.07858536372532510+B*0.00792551253479842)
|
ClipByte(R * 0.91348912373987645 + G * 0.07858536372532510 + B * 0.00792551253479842)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def ConvertType2(row, height, bottomReserved):
|
def ConvertType2(row, height, bottomReserved):
|
||||||
return height-bottomReserved-row
|
return height - bottomReserved - row
|
||||||
|
|
||||||
|
|
||||||
def ConvertToFile(filename_or_file, *args, **kwargs):
|
def ConvertToFile(filename_or_file, *args, **kwargs):
|
||||||
@ -708,6 +708,7 @@ def FilterBadChars(f):
|
|||||||
|
|
||||||
|
|
||||||
class safe_list(list):
|
class safe_list(list):
|
||||||
|
|
||||||
def get(self, index, default=None):
|
def get(self, index, default=None):
|
||||||
try:
|
try:
|
||||||
return self[index]
|
return self[index]
|
||||||
|
@ -13,6 +13,7 @@ except (AttributeError, ImportError):
|
|||||||
|
|
||||||
extcode = 0
|
extcode = 0
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(level=logging.INFO)
|
||||||
for Y in (120, 360):
|
for Y in (120, 360):
|
||||||
@ -23,50 +24,54 @@ def main():
|
|||||||
logging.info('(%3d, %3d), %4d, %4d => %4d, %4d, %4d, %4d%%' % (X, Y, rotY, rotZ, outX, outY, outZ, scaleX))
|
logging.info('(%3d, %3d), %4d, %4d => %4d, %4d, %4d, %4d%%' % (X, Y, rotY, rotZ, outX, outY, outZ, scaleX))
|
||||||
CompareMatrix(rotY, rotZ, outX, outY, outZ)
|
CompareMatrix(rotY, rotZ, outX, outY, outZ)
|
||||||
|
|
||||||
|
|
||||||
def CompareMatrix(rotY, rotZ, outX, outY, outZ):
|
def CompareMatrix(rotY, rotZ, outX, outY, outZ):
|
||||||
def ApproxEqual(a, b, e=0.015):
|
def ApproxEqual(a, b, e=0.015):
|
||||||
assert e >= 0
|
assert e >= 0
|
||||||
a_b = a-b
|
a_b = a - b
|
||||||
if -e < a_b < e:
|
if -e < a_b < e:
|
||||||
return 0
|
return 0
|
||||||
else:
|
else:
|
||||||
return a_b
|
return a_b
|
||||||
|
|
||||||
def FormatError(i, j, l, r):
|
def FormatError(i, j, l, r):
|
||||||
global extcode
|
global extcode
|
||||||
if ApproxEqual(l, r) != 0:
|
if ApproxEqual(l, r) != 0:
|
||||||
extcode = 1
|
extcode = 1
|
||||||
logging.error('l[%s][%s]=%9.6f r[%s][%s]=%9.6f' % (i, j, l, i, j, r))
|
logging.error('l[%s][%s]=%9.6f r[%s][%s]=%9.6f' % (i, j, l, i, j, r))
|
||||||
def sind(x):
|
|
||||||
return math.sin(x*math.pi/180.0)
|
|
||||||
def cosd(x):
|
|
||||||
return math.cos(x*math.pi/180.0)
|
|
||||||
|
|
||||||
l = cosd(rotY)*cosd(rotZ)
|
def sind(x):
|
||||||
r = -sind(outX)*sind(outY)*sind(outZ)+cosd(outY)*cosd(outZ)
|
return math.sin(x * math.pi / 180.0)
|
||||||
|
|
||||||
|
def cosd(x):
|
||||||
|
return math.cos(x * math.pi / 180.0)
|
||||||
|
|
||||||
|
l = cosd(rotY) * cosd(rotZ)
|
||||||
|
r = -sind(outX) * sind(outY) * sind(outZ) + cosd(outY) * cosd(outZ)
|
||||||
FormatError(0, 0, l, r)
|
FormatError(0, 0, l, r)
|
||||||
l = cosd(rotY)*sind(rotZ)
|
l = cosd(rotY) * sind(rotZ)
|
||||||
r = -cosd(outX)*sind(outZ)
|
r = -cosd(outX) * sind(outZ)
|
||||||
FormatError(0, 1, l, r)
|
FormatError(0, 1, l, r)
|
||||||
l = sind(rotY)
|
l = sind(rotY)
|
||||||
r = -sind(outX)*cosd(outY)*sind(outZ)-sind(outY)*cosd(outZ)
|
r = -sind(outX) * cosd(outY) * sind(outZ) - sind(outY) * cosd(outZ)
|
||||||
FormatError(0, 2, l, r)
|
FormatError(0, 2, l, r)
|
||||||
l = -sind(rotZ)
|
l = -sind(rotZ)
|
||||||
r = sind(outX)*sind(outY)*cosd(outZ)+cosd(outY)*sind(outZ)
|
r = sind(outX) * sind(outY) * cosd(outZ) + cosd(outY) * sind(outZ)
|
||||||
FormatError(1, 0, l, r)
|
FormatError(1, 0, l, r)
|
||||||
l = cosd(rotZ)
|
l = cosd(rotZ)
|
||||||
r = cosd(outX)*cosd(outZ)
|
r = cosd(outX) * cosd(outZ)
|
||||||
FormatError(1, 1, l, r)
|
FormatError(1, 1, l, r)
|
||||||
l = 0
|
l = 0
|
||||||
r = sind(outX)*cosd(outY)*cosd(outZ)-sind(outY)*sind(outZ)
|
r = sind(outX) * cosd(outY) * cosd(outZ) - sind(outY) * sind(outZ)
|
||||||
FormatError(1, 2, l, r)
|
FormatError(1, 2, l, r)
|
||||||
l = -sind(rotY)*cosd(rotZ)
|
l = -sind(rotY) * cosd(rotZ)
|
||||||
r = cosd(outX)*sind(outY)
|
r = cosd(outX) * sind(outY)
|
||||||
FormatError(2, 0, l, r)
|
FormatError(2, 0, l, r)
|
||||||
l = -sind(rotY)*sind(rotZ)
|
l = -sind(rotY) * sind(rotZ)
|
||||||
r = -sind(outX)
|
r = -sind(outX)
|
||||||
FormatError(2, 1, l, r)
|
FormatError(2, 1, l, r)
|
||||||
l = cosd(rotY)
|
l = cosd(rotY)
|
||||||
r = cosd(outX)*cosd(outY)
|
r = cosd(outX) * cosd(outY)
|
||||||
FormatError(2, 2, l, r)
|
FormatError(2, 2, l, r)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
Loading…
Reference in New Issue
Block a user