TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 新人加入
查看: 4079|回复: 2
打印 上一主题 下一主题

[完整特效] [SAI]045_mekakucityactorsED [复制链接]

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

跳转到指定楼层
楼主
发表于 2014-4-29 22:29:36 |显示全部楼层 |倒序浏览
預覽:http://pan.baidu.com/s/1hqqY9CC#dir/path=%2FSaiyakuFX_Preview
第一次用tcvideo 稍微寫了點注釋 tcvideo這個模塊貌似沒發 改天發吧
  1. from tcaxPy import *
  2. from util.tcVideo import *



  3. def tcaxPy_Init():
  4.     global _Fs
  5.     global Font
  6.     global fx_fps
  7.     global _FD
  8.     global video
  9.     global _L
  10.     _L = GetVal(val_TextLength)
  11.     _Fs = GetVal(val_FontSize)
  12.     Font = InitFont(GetVal(val_FontFileName), GetVal(val_FaceID), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0xFFFFFF, 0, 0)
  13.     fx_fps = GetVal(val_FXFPS)
  14.     _FD = 1000 / GetVal(val_FXFPS)
  15.     tcVideoInit()    # tcvideo初始化
  16.     video = tcVideoOpen('test.mp4')   #打開媒體文件
  17.     global light
  18.     light = []

  19.     r_o = 65
  20.     l_o = 0
  21.     for i in range (2200):
  22.         PIX = tcVideoGetFrame(video, int((getBT(0)*10/_FD)+0.5)+i)   # 獲取int((getBT(0)*10/_FD)+0.5)+i幀的畫面像素信息

  23.         cc = 30     #這邊沒什麼用 只是在調整 畫面黑白的計算容差
  24.         if int((getBT(0)*10/_FD)+0.5)+i > 30200:
  25.             cc = 15
  26.         if int((getBT(0)*10/_FD)+0.5)+i > 30840:
  27.             cc = 30
  28.         if int((getBT(0)*10/_FD)+0.5)+i > 31040:
  29.             cc = 15
  30.         if int((getBT(0)*10/_FD)+0.5)+i > 31810:
  31.             cc = 5
  32.         
  33.         h = 265   #像素Y坐標
  34.         w = 618   #像素X坐標
  35.         idx  = 4 * (h * PIX[1][0] + w)  #list腳標
  36.         r = PIX[2][idx + 0]  # RGB顏色 R值
  37.         #print(r)    #debug用
  38.         if r - r_o > cc:
  39.             l = 1
  40.         elif r_o -r >cc:
  41.             l = 0
  42.         else:
  43.             l=l_o
  44.         light.append(l)
  45.             
  46.         r_o = r
  47.         l_o = l

  48. def tcaxPy_Fin():
  49.     FinFont(Font)
  50.     tcVideoClose(video)    #關閉
  51.     tcVideoFin()

  52. def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):

  53.     ASS_BUF  = []        # 保存ASS特效
  54.     TCAS_BUF = []        # 保存TCAS特效

  55.             

  56.     dx = _X - int(_A / 2 + 0.5)
  57.     dy = _Y - int(_Fs / 2 + 0.5)

  58.     outline = TextOutlineDraw(Font, _TXT, dx, dy)

  59.     t0 = _BT - 15 + _j * 7
  60.     t1 = t0 + 50
  61.     t2 = _BT + _SK - 5
  62.     t3 = _BT + _SK + _KT
  63.     t4 = _ET - 60 + _j * 7
  64.     t5 = t4 + 15

  65.     scol = 'FFFFFF'

  66.     T = 120

  67.     if _KT>120:
  68.         T = _KT
  69.    
  70.     ass_main(ASS_BUF, SubL(t2, t2+T, 11, Pix_Style), pos(0, 0) + fad(0, 900) + alpha1(0) + alpha3(HexToDec('77')) + \
  71.                                            blur(5) + bord(5) + t(bord(0)), '{\\p7}' + outline + '{\\p0}')
  72.     ass_main(ASS_BUF, SubL(t0, t5, 5, Pix_Style), pos(1, 1) + fad(500, 500) + alpha1(0) + blur(1.3) + color1('000000'), \
  73.                                                    '{\\p7}' + outline + '{\\p0}')

  74.     bframe = int((t0-getBT(0))*10/_FD)
  75.     if light[bframe]==1:

  76.         ass_main(ASS_BUF, SubL(t0, t1, 6, Pix_Style), pos(0, 0) + fad(500, 0) + alpha1(150)  + color1('FFFFFF'),'{\\p7}' + outline + '{\\p0}')
  77.     else:
  78.         ass_main(ASS_BUF, SubL(t0,t1, 6, Pix_Style), pos(0, 0) + fad(500, 0) + alpha1(120)  + color1('000000'),'{\\p7}' + outline + '{\\p0}')

  79.     frames = int((_ET - 60-t1)*10 / _FD + 0.5)   #總幀數
  80.     bframe = int((t1-getBT(0))*10/_FD)      #開始幀
  81.     ts = t1
  82.     te = t1
  83.     ll = light[bframe]
  84.     ll_o = light[bframe]
  85.     for i in range(frames):      #逐幀
  86.         te += _FD / 10
  87.         ll = light[bframe+i]
  88.         if ll != ll_o:

  89.             ll_o = ll
  90.             if te < _ET - 60:
  91.                 if ll!=1:
  92.                     ass_main(ASS_BUF, SubL(ts, te - _FD / 10, 6, Pix_Style), pos(0, 0) +fad(30,30) + alpha1(150)  + color1('FFFFFF'),'{\\p7}' + outline + '{\\p0}')
  93.                 else:
  94.                     ass_main(ASS_BUF, SubL(ts,te - _FD / 10, 6, Pix_Style), pos(0, 0) +fad(30,30) + alpha1(120)  + color1('000000'),'{\\p7}' + outline + '{\\p0}')
  95.             ts = te - _FD / 10

  96.     # 這下面就沒什麼好講的了 無視
  97.     lastptx0 = 0
  98.     lastpty0 = 0
  99.     first = True
  100.     ti = t0 - 100 + randint(-30, 30)
  101.     while ti <= t5 - 150:
  102.         ptt0 = ti
  103.         ptt1 = ptt0 + 300
  104.         ptx0 = randint(_X - 20, _X + 20)
  105.         pty0 = randint(_Y - 20, _Y + 20)
  106.         if not first:
  107.             for i in range(2):
  108.                 ptx0_tmp = randint(_X - 20, _X + 20)
  109.                 pty0_tmp = randint(_Y - 20, _Y + 20)
  110.                 if GetDistance(lastptx0, lastpty0, ptx0, pty0) < GetDistance(lastptx0, lastpty0, ptx0_tmp, pty0_tmp):
  111.                     ptx0 = ptx0_tmp
  112.                     pty0 = pty0_tmp
  113.         first = False
  114.         lastptx0 = ptx0
  115.         lastpty0 = pty0
  116.         ptcol = 'FFFFFF'
  117.         lumsz = 15 + GetDistance(_X, _Y, ptx0, pty0) * 0.5
  118.         if ptt0 >= t2:
  119.             ptcol = scol
  120.         ts0 = ''
  121.         if ptt0 < t2 and ptt1 > t2:
  122.             ts0 = t(10 * (t2 - ptt0) - 10, 10 * (t2 - ptt0), color1(scol) + color3(scol))
  123.         dup = 1
  124.         if _j >= 4:
  125.             dup = 2
  126.         while dup > 0:
  127.             ass_main(ASS_BUF, SubL(ptt0, ptt1, 10, Pix_Style), pos(ptx0, pty0) + clip(7, outline) + org(_X, _Y) + t(frz(RandSign() * randint(80, 120))) + \
  128.                                 fad(800, 800) + t(0, 10 * (ptt1 - ptt0), bord(lumsz) + blur(lumsz)) + alpha1(HexToDec('44')) + alpha3(HexToDec('44')) + color1(ptcol) + color3(ptcol) + \
  129.                                 ts0 + t((ptt1 - ptt0) * 700, ptt1, color1('000000') + color3('000000')), PixPt())
  130.             dup -= 1
  131.         ti += randint(120, 165)

  132.    

  133.     return (ASS_BUF, TCAS_BUF)
复制代码
3

查看全部评分

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

沙发
发表于 2014-4-30 21:41:41 |显示全部楼层
milkyjing 发表于 2014-4-30 20:43
这货前些天小伊也尝试了下, 话说我都忘光了...

p.s. 效果和画面很融合啊, 赞一个 ...

小伊用的tcaudio吧 這是tcvideo
貌似沒發佈 我去發佈一下? 順便把例子扔出來

Administrator

Shanzhai Pro.

Rank: 7Rank: 7Rank: 7

板凳
发表于 2014-5-1 16:03:51 |显示全部楼层
milkyjing 发表于 2014-4-30 22:28
给力~ 发吧

我看错了


在改那個平均值算法
我昨天試了取區域方塊的平均值還是和畫面一點關係都沒有。。。
我估計改成取中值也許會接近一點
畢竟一般做畫像處理也都是medianfilter
另外眾數什麼的 也可能試一下
改完 會和例子一起放出來
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-5-5 16:32

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH