Merge pull request #5 from 910JQK/master

Add support for sH5V positioned comment
This commit is contained in:
Star Brilliant 2014-02-03 03:19:25 -08:00
commit a50e421aaa
10 changed files with 207 additions and 152 deletions

View File

@ -59,7 +59,7 @@ optional arguments:
-fs SIZE, --fontsize SIZE
Default font size [default: 25]
-a ALPHA, --alpha ALPHA
Text opaque
Text opacity
-l SECONDS, --lifetime SECONDS
Duration of comment display [default: 5]
-p HEIGHT, --protect HEIGHT

View File

@ -219,7 +219,18 @@ def ReadCommentsSH5V(f, fontsize):
c_color = str(comment['color'])
c = str(comment['text'])
size = fontsize
yield (float(c_at), int(c_date), i, c, {'0': 0, '1': 0, '4': 2, '5': 1}[c_type], int(c_color[1:], 16), size, (c.count('\n')+1)*size, CalculateLength(c)*size)
if c_type != '7':
yield (float(c_at), int(c_date), i, c, {'0': 0, '1': 0, '4': 2, '5': 1}[c_type], int(c_color[1:], 16), size, (c.count('\n')+1)*size, CalculateLength(c)*size)
else:
c_x = float(comment['x'])
c_y = float(comment['y'])
size = int(comment['size'])
dur = int(comment['dur'])
data1 = float(comment['data1'])
data2 = float(comment['data2'])
data3 = int(comment['data3'])
data4 = int(comment['data4'])
yield (float(c_at), int(c_date), i, c, 'sH5Vpos', int(c_color[1:], 16), size, 0, 0, c_x, c_y, dur, data1, data2, data3, data4)
except (AssertionError, AttributeError, IndexError, TypeError, ValueError):
logging.warning(_('Invalid comment: %r') % comment)
continue
@ -425,6 +436,48 @@ def WriteCommentAcfunPositioned(f, c, width, height, styleid):
except (IndexError, ValueError) as e:
logging.warning(_('Invalid comment: %r') % c[3])
def WriteCommentSH5VPositioned(f, c, width, height, styleid):
def GetTransformStyles(x=None, y=None, fsize=None, rotate_z=None, rotate_y=None, color=None, alpha=None):
styles = []
if x is not None and y is not None:
styles.append('\\pos(%s, %s)' % (x, y))
if fsize is not None:
styles.append('\\fs%s' % fsize)
if rotate_y is not None and rotate_z is not None:
styles.append('\\frz%s' % round(rotate_z))
styles.append('\\fry%s' % round(rotate_y))
if color is not None:
styles.append('\\c&H%02X%02X%02X&' % (color & 0xff, (color >> 8) & 0xff, (color >> 16) & 0xff))
if color == 0x000000:
styles.append('\\3c&HFFFFFF&')
if alpha is not None:
alpha = 255-round(alpha*255)
styles.append('\\alpha&H%02X' % alpha)
return styles
def FlushCommentLine(f, text, styles, start_time, end_time, styleid):
if end_time > start_time:
f.write('Dialogue: -1,%(start)s,%(end)s,%(styleid)s,,0,0,0,,{%(styles)s}%(text)s\n' % {'start': ConvertTimestamp(start_time), 'end': ConvertTimestamp(end_time), 'styles': ''.join(styles), 'text': text, 'styleid': styleid})
try:
text = ASSEscape(str(c[3]))
to_x = round(float(c[9])*width)
to_y = round(float(c[10])*height)
to_rotate_z = -int(c[14])
to_rotate_y = -int(c[15])
to_color = c[5]
to_alpha = float(c[12])
#Note: Alpha transition hasn't been worked out yet.
to_size = round(int(c[6])*math.sqrt(width*height/307200))
#Note: Because sH5V's data is the absolute size of font,temporarily solve by it at present.[*math.sqrt(width/640*height/480)]
#But it seems to be working fine...
from_time = float(c[0])
action_time = float(c[11])/1000
transform_styles = GetTransformStyles(to_x, to_y, to_size, to_rotate_z, to_rotate_y, to_color, to_alpha)
FlushCommentLine(f, text, transform_styles, from_time, from_time+action_time, styleid)
except (IndexError, ValueError) as e:
logging.warning(_('Invalid comment: %r') % c[3])
# Result: (f, dx, dy)
# To convert: NewX = f*x+dx, NewY = f*y+dy
@ -479,6 +532,8 @@ def ProcessComments(comments, f, width, height, bottomReserved, fontface, fontsi
WriteCommentBilibiliPositioned(f, i, width, height, styleid)
elif i[4] == 'acfunpos':
WriteCommentAcfunPositioned(f, i, width, height, styleid)
elif i[4] == 'sH5Vpos':
WriteCommentSH5VPositioned(f, i, width, height, styleid)
else:
logging.warning(_('Invalid comment: %r') % i[3])
if progress_callback:
@ -680,7 +735,7 @@ def main():
parser.add_argument('-s', '--size', metavar=_('WIDTHxHEIGHT'), required=True, help=_('Stage size in pixels'))
parser.add_argument('-fn', '--font', metavar=_('FONT'), help=_('Specify font face [default: %s]') % _('(FONT) sans-serif')[7:], default=_('(FONT) sans-serif')[7:])
parser.add_argument('-fs', '--fontsize', metavar=_('SIZE'), help=(_('Default font size [default: %s]') % 25), type=float, default=25.0)
parser.add_argument('-a', '--alpha', metavar=_('ALPHA'), help=_('Text opaque'), type=float, default=1.0)
parser.add_argument('-a', '--alpha', metavar=_('ALPHA'), help=_('Text opacity'), type=float, default=1.0)
parser.add_argument('-l', '--lifetime', metavar=_('SECONDS'), help=_('Duration of comment display [default: %s]') % 5, type=float, default=5.0)
parser.add_argument('-p', '--protect', metavar=_('HEIGHT'), help=_('Reserve blank on the bottom of the stage'), type=int, default=0)
parser.add_argument('-r', '--reduce', action='store_true', help=_('Reduce the amount of comments if stage is full'))

Binary file not shown.

View File

@ -2,105 +2,105 @@ msgid ""
msgstr ""
"Project-Id-Version: Danmaku2ASS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-24 15:30+0800\n"
"POT-Creation-Date: 2014-02-03 16:50+0800\n"
"Last-Translator: Star Brilliant <m13253@hotmail.com>\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: danmaku2ass.py:130 danmaku2ass.py:165 danmaku2ass.py:195
#: danmaku2ass.py:139 danmaku2ass.py:178 danmaku2ass.py:208
#, python-format
msgid "Invalid comment: %s"
msgstr "Invalid comment: %s"
#: danmaku2ass.py:145 danmaku2ass.py:179 danmaku2ass.py:211 danmaku2ass.py:317
#: danmaku2ass.py:319 danmaku2ass.py:348
#: danmaku2ass.py:158 danmaku2ass.py:192 danmaku2ass.py:235 danmaku2ass.py:317
#: danmaku2ass.py:319 danmaku2ass.py:437 danmaku2ass.py:480 danmaku2ass.py:538
#, python-format
msgid "Invalid comment: %r"
msgstr "Invalid comment: %r"
#: danmaku2ass.py:496 danmaku2ass.py:539
#: danmaku2ass.py:688 danmaku2ass.py:736
msgid "(FONT) sans-serif"
msgstr "(FONT) Helvetica"
#: danmaku2ass.py:522
#: danmaku2ass.py:717
#, python-format
msgid "Unknown comment file format: %s"
msgstr "Unknown comment file format: %s"
#: danmaku2ass.py:537
#: danmaku2ass.py:734
msgid "OUTPUT"
msgstr "OUTPUT"
#: danmaku2ass.py:537
#: danmaku2ass.py:734
msgid "Output file"
msgstr "Output file"
#: danmaku2ass.py:538
msgid "Stage size in pixels"
msgstr "Stage size in pixels"
#: danmaku2ass.py:538
#: danmaku2ass.py:735
msgid "WIDTHxHEIGHT"
msgstr "WIDTHxHEIGHT"
#: danmaku2ass.py:539
#: danmaku2ass.py:735
msgid "Stage size in pixels"
msgstr "Stage size in pixels"
#: danmaku2ass.py:736
msgid "FONT"
msgstr "FONT"
#: danmaku2ass.py:539
#: danmaku2ass.py:736
#, python-format
msgid "Specify font face [default: %s]"
msgstr "Specify font face [default: %s]"
#: danmaku2ass.py:540
#: danmaku2ass.py:737
msgid "SIZE"
msgstr "SIZE"
#: danmaku2ass.py:737
#, python-format
msgid "Default font size [default: %s]"
msgstr "Default font size [default: %s]"
#: danmaku2ass.py:540
msgid "SIZE"
msgstr "SIZE"
#: danmaku2ass.py:541
#: danmaku2ass.py:738
msgid "ALPHA"
msgstr "ALPHA"
#: danmaku2ass.py:541
msgid "Text opaque"
msgstr "Text opaque"
#: danmaku2ass.py:738
msgid "Text opacity"
msgstr "Text opacity"
#: danmaku2ass.py:542
#: danmaku2ass.py:739
msgid "SECONDS"
msgstr "SECONDS"
#: danmaku2ass.py:739
#, python-format
msgid "Duration of comment display [default: %s]"
msgstr "Duration of comment display [default: %s]"
#: danmaku2ass.py:542
msgid "SECONDS"
msgstr "SECONDS"
#: danmaku2ass.py:543
#: danmaku2ass.py:740
msgid "HEIGHT"
msgstr "HEIGHT"
#: danmaku2ass.py:543
#: danmaku2ass.py:740
msgid "Reserve blank on the bottom of the stage"
msgstr "Reserve blank on the bottom of the stage"
#: danmaku2ass.py:544
#: danmaku2ass.py:741
msgid "Reduce the amount of comments if stage is full"
msgstr "Reduce the amount of comments if stage is full"
#: danmaku2ass.py:545
msgid "Comment file to be processed"
msgstr "Comment file to be processed"
#: danmaku2ass.py:545
#: danmaku2ass.py:742
msgid "FILE"
msgstr "FILE"
#: danmaku2ass.py:552
#: danmaku2ass.py:742
msgid "Comment file to be processed"
msgstr "Comment file to be processed"
#: danmaku2ass.py:749
#, python-format
msgid "Invalid stage size: %r"
msgstr "Invalid stage size: %r"

Binary file not shown.

View File

@ -2,105 +2,105 @@ msgid ""
msgstr ""
"Project-Id-Version: Danmaku2ASS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-24 15:30+0800\n"
"POT-Creation-Date: 2014-02-03 16:50+0800\n"
"Last-Translator: Star Brilliant <m13253@hotmail.com>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: danmaku2ass.py:130 danmaku2ass.py:165 danmaku2ass.py:195
#: danmaku2ass.py:139 danmaku2ass.py:178 danmaku2ass.py:208
#, python-format
msgid "Invalid comment: %s"
msgstr "無効なコメント:%s"
#: danmaku2ass.py:145 danmaku2ass.py:179 danmaku2ass.py:211 danmaku2ass.py:317
#: danmaku2ass.py:319 danmaku2ass.py:348
#: danmaku2ass.py:158 danmaku2ass.py:192 danmaku2ass.py:235 danmaku2ass.py:317
#: danmaku2ass.py:319 danmaku2ass.py:437 danmaku2ass.py:480 danmaku2ass.py:538
#, python-format
msgid "Invalid comment: %r"
msgstr "無効なコメント:%r"
#: danmaku2ass.py:496 danmaku2ass.py:539
#: danmaku2ass.py:688 danmaku2ass.py:736
msgid "(FONT) sans-serif"
msgstr "(FONT) MS PGothic"
#: danmaku2ass.py:522
#: danmaku2ass.py:717
#, python-format
msgid "Unknown comment file format: %s"
msgstr "未知のコメントファイル形式:%s"
#: danmaku2ass.py:537
#: danmaku2ass.py:734
msgid "OUTPUT"
msgstr "出力"
#: danmaku2ass.py:537
#: danmaku2ass.py:734
msgid "Output file"
msgstr "出力ファイル"
#: danmaku2ass.py:538
msgid "Stage size in pixels"
msgstr "ピクセル単位でステージのサイズ"
#: danmaku2ass.py:538
#: danmaku2ass.py:735
msgid "WIDTHxHEIGHT"
msgstr "幅x高"
#: danmaku2ass.py:539
#: danmaku2ass.py:735
msgid "Stage size in pixels"
msgstr "ピクセル単位でステージのサイズ"
#: danmaku2ass.py:736
msgid "FONT"
msgstr "フォント"
#: danmaku2ass.py:539
#: danmaku2ass.py:736
#, python-format
msgid "Specify font face [default: %s]"
msgstr "フォントを指定する [デフォルト: %s]"
#: danmaku2ass.py:540
#: danmaku2ass.py:737
msgid "SIZE"
msgstr "サイズ"
#: danmaku2ass.py:737
#, python-format
msgid "Default font size [default: %s]"
msgstr "デフォルトのフォントサイズ [デフォルト: %s]"
#: danmaku2ass.py:540
msgid "SIZE"
msgstr "サイズ"
#: danmaku2ass.py:541
#: danmaku2ass.py:738
msgid "ALPHA"
msgstr "アルファ"
#: danmaku2ass.py:541
msgid "Text opaque"
#: danmaku2ass.py:738
msgid "Text opacity"
msgstr "テキストの不透明度"
#: danmaku2ass.py:542
#: danmaku2ass.py:739
msgid "SECONDS"
msgstr "秒数"
#: danmaku2ass.py:739
#, python-format
msgid "Duration of comment display [default: %s]"
msgstr "コメント表示の時間 [デフォルト: %s]"
#: danmaku2ass.py:542
msgid "SECONDS"
msgstr "秒数"
#: danmaku2ass.py:543
#: danmaku2ass.py:740
msgid "HEIGHT"
msgstr "高度"
#: danmaku2ass.py:543
#: danmaku2ass.py:740
msgid "Reserve blank on the bottom of the stage"
msgstr "ステージの下にブランクを予備する"
#: danmaku2ass.py:544
#: danmaku2ass.py:741
msgid "Reduce the amount of comments if stage is full"
msgstr "ステージがいっぱいになったのときにコメントの量を減らす"
#: danmaku2ass.py:545
msgid "Comment file to be processed"
msgstr "ファイルが処理されるコメント"
#: danmaku2ass.py:545
#: danmaku2ass.py:742
msgid "FILE"
msgstr "ファイル"
#: danmaku2ass.py:552
#: danmaku2ass.py:742
msgid "Comment file to be processed"
msgstr "ファイルが処理されるコメント"
#: danmaku2ass.py:749
#, python-format
msgid "Invalid stage size: %r"
msgstr "無効なステージサイズ:%r"

View File

@ -2,105 +2,105 @@ msgid ""
msgstr ""
"Project-Id-Version: Danmaku2ASS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-24 15:30+0800\n"
"POT-Creation-Date: 2014-02-03 16:50+0800\n"
"Last-Translator: Star Brilliant <m13253@hotmail.com>\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: danmaku2ass.py:130 danmaku2ass.py:165 danmaku2ass.py:195
#: danmaku2ass.py:139 danmaku2ass.py:178 danmaku2ass.py:208
#, python-format
msgid "Invalid comment: %s"
msgstr "无效弹幕:%s"
#: danmaku2ass.py:145 danmaku2ass.py:179 danmaku2ass.py:211 danmaku2ass.py:317
#: danmaku2ass.py:319 danmaku2ass.py:348
#: danmaku2ass.py:158 danmaku2ass.py:192 danmaku2ass.py:235 danmaku2ass.py:317
#: danmaku2ass.py:319 danmaku2ass.py:437 danmaku2ass.py:480 danmaku2ass.py:538
#, python-format
msgid "Invalid comment: %r"
msgstr "无效弹幕:%r"
#: danmaku2ass.py:496 danmaku2ass.py:539
#: danmaku2ass.py:688 danmaku2ass.py:736
msgid "(FONT) sans-serif"
msgstr "(FONT) SimHei"
#: danmaku2ass.py:522
#: danmaku2ass.py:717
#, python-format
msgid "Unknown comment file format: %s"
msgstr "未知的弹幕文件格式:%s"
#: danmaku2ass.py:537
#: danmaku2ass.py:734
msgid "OUTPUT"
msgstr "输出"
#: danmaku2ass.py:537
#: danmaku2ass.py:734
msgid "Output file"
msgstr "输出文件"
#: danmaku2ass.py:538
msgid "Stage size in pixels"
msgstr "舞台尺寸的像素数目"
#: danmaku2ass.py:538
#: danmaku2ass.py:735
msgid "WIDTHxHEIGHT"
msgstr "宽x高"
#: danmaku2ass.py:539
#: danmaku2ass.py:735
msgid "Stage size in pixels"
msgstr "舞台尺寸的像素数目"
#: danmaku2ass.py:736
msgid "FONT"
msgstr "字体"
#: danmaku2ass.py:539
#: danmaku2ass.py:736
#, python-format
msgid "Specify font face [default: %s]"
msgstr "指定字体名称 [默认: %s]"
#: danmaku2ass.py:540
#: danmaku2ass.py:737
msgid "SIZE"
msgstr "尺寸"
#: danmaku2ass.py:737
#, python-format
msgid "Default font size [default: %s]"
msgstr "默认字号 [默认: %s]"
#: danmaku2ass.py:540
msgid "SIZE"
msgstr "尺寸"
#: danmaku2ass.py:541
#: danmaku2ass.py:738
msgid "ALPHA"
msgstr "ALPHA"
#: danmaku2ass.py:541
msgid "Text opaque"
#: danmaku2ass.py:738
msgid "Text opacity"
msgstr "文字不透明度"
#: danmaku2ass.py:542
#: danmaku2ass.py:739
msgid "SECONDS"
msgstr "秒数"
#: danmaku2ass.py:739
#, python-format
msgid "Duration of comment display [default: %s]"
msgstr "弹幕显示时长 [默认: %s]"
#: danmaku2ass.py:542
msgid "SECONDS"
msgstr "秒数"
#: danmaku2ass.py:543
#: danmaku2ass.py:740
msgid "HEIGHT"
msgstr "高度"
#: danmaku2ass.py:543
#: danmaku2ass.py:740
msgid "Reserve blank on the bottom of the stage"
msgstr "在舞台底部预留空位"
#: danmaku2ass.py:544
#: danmaku2ass.py:741
msgid "Reduce the amount of comments if stage is full"
msgstr "在舞台满时减少弹幕数量"
#: danmaku2ass.py:545
msgid "Comment file to be processed"
msgstr "将要处理的弹幕文件"
#: danmaku2ass.py:545
#: danmaku2ass.py:742
msgid "FILE"
msgstr "文件"
#: danmaku2ass.py:552
#: danmaku2ass.py:742
msgid "Comment file to be processed"
msgstr "将要处理的弹幕文件"
#: danmaku2ass.py:749
#, python-format
msgid "Invalid stage size: %r"
msgstr "无效舞台尺寸:%r"

View File

@ -2,105 +2,105 @@ msgid ""
msgstr ""
"Project-Id-Version: Danmaku2ASS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-11-24 15:30+0800\n"
"POT-Creation-Date: 2014-02-03 16:50+0800\n"
"Last-Translator: Star Brilliant <m13253@hotmail.com>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: danmaku2ass.py:130 danmaku2ass.py:165 danmaku2ass.py:195
#: danmaku2ass.py:139 danmaku2ass.py:178 danmaku2ass.py:208
#, python-format
msgid "Invalid comment: %s"
msgstr "無效彈幕:%s"
#: danmaku2ass.py:145 danmaku2ass.py:179 danmaku2ass.py:211 danmaku2ass.py:317
#: danmaku2ass.py:319 danmaku2ass.py:348
#: danmaku2ass.py:158 danmaku2ass.py:192 danmaku2ass.py:235 danmaku2ass.py:317
#: danmaku2ass.py:319 danmaku2ass.py:437 danmaku2ass.py:480 danmaku2ass.py:538
#, python-format
msgid "Invalid comment: %r"
msgstr "無效彈幕:%r"
#: danmaku2ass.py:496 danmaku2ass.py:539
#: danmaku2ass.py:688 danmaku2ass.py:736
msgid "(FONT) sans-serif"
msgstr "(FONT) Microsoft JhengHei"
#: danmaku2ass.py:522
#: danmaku2ass.py:717
#, python-format
msgid "Unknown comment file format: %s"
msgstr "未知的彈幕檔案格式:%s"
#: danmaku2ass.py:537
#: danmaku2ass.py:734
msgid "OUTPUT"
msgstr "輸出"
#: danmaku2ass.py:537
#: danmaku2ass.py:734
msgid "Output file"
msgstr "輸出檔案"
#: danmaku2ass.py:538
msgid "Stage size in pixels"
msgstr "舞臺尺寸的畫素數目"
#: danmaku2ass.py:538
#: danmaku2ass.py:735
msgid "WIDTHxHEIGHT"
msgstr "寬x高"
#: danmaku2ass.py:539
#: danmaku2ass.py:735
msgid "Stage size in pixels"
msgstr "舞臺尺寸的畫素數目"
#: danmaku2ass.py:736
msgid "FONT"
msgstr "字型"
#: danmaku2ass.py:539
#: danmaku2ass.py:736
#, python-format
msgid "Specify font face [default: %s]"
msgstr "指定字型名稱 [默認: %s]"
#: danmaku2ass.py:540
#: danmaku2ass.py:737
msgid "SIZE"
msgstr "尺寸"
#: danmaku2ass.py:737
#, python-format
msgid "Default font size [default: %s]"
msgstr "默認字型大小 [默認: %s]"
#: danmaku2ass.py:540
msgid "SIZE"
msgstr "尺寸"
#: danmaku2ass.py:541
#: danmaku2ass.py:738
msgid "ALPHA"
msgstr "ALPHA"
#: danmaku2ass.py:541
msgid "Text opaque"
#: danmaku2ass.py:738
msgid "Text opacity"
msgstr "文字不透明度"
#: danmaku2ass.py:542
#: danmaku2ass.py:739
msgid "SECONDS"
msgstr "秒數"
#: danmaku2ass.py:739
#, python-format
msgid "Duration of comment display [default: %s]"
msgstr "彈幕顯示時長 [默認: %s]"
#: danmaku2ass.py:542
msgid "SECONDS"
msgstr "秒數"
#: danmaku2ass.py:543
#: danmaku2ass.py:740
msgid "HEIGHT"
msgstr "高度"
#: danmaku2ass.py:543
#: danmaku2ass.py:740
msgid "Reserve blank on the bottom of the stage"
msgstr "在舞臺底部預留空位"
#: danmaku2ass.py:544
#: danmaku2ass.py:741
msgid "Reduce the amount of comments if stage is full"
msgstr "在舞臺滿時減少彈幕數量"
#: danmaku2ass.py:545
msgid "Comment file to be processed"
msgstr "將要處理的彈幕檔案"
#: danmaku2ass.py:545
#: danmaku2ass.py:742
msgid "FILE"
msgstr "檔案"
#: danmaku2ass.py:552
#: danmaku2ass.py:742
msgid "Comment file to be processed"
msgstr "將要處理的彈幕檔案"
#: danmaku2ass.py:749
#, python-format
msgid "Invalid stage size: %r"
msgstr "無效舞臺尺寸:%r"