- UID
 - 2443
 - 积分
 - 1311
 - 帖子
 - 78
 - 主题
 - 21
 - 论坛币
 - 909 
 - 威望
 - 8 
 - EP值
 - 449 
 - MP值
 - 0 
 - 阅读权限
 - 100
 - 注册时间
 - 2015-3-7
 - 在线时间
 - 121 小时
 - 最后登录
 - 2018-7-21
  
 
 
 
   
 | 
 本帖最后由 面麻 于 2016-5-19 19:50 编辑  
 
重写特效之一。 
完整工程以及相关文件均在百度网盘。 
链接: http://pan.baidu.com/s/1nvNCyGp 密码: vky3 
字体是黑体,就不上传了。 
效果预览可以看 preview.mp4。- from tcaxPy import *
 
 - from util.tcAudio import *
 
  
 
- def tcaxPy_Init():     # TCC 文件 < tcaxpy init = true >
 
 -     global framedur    # 每一帧的时间长度,毫秒
 
 -     global fontsize
 
 -     framedur = 1000 / GetVal(val_FXFPS)
 
 -     fontsize = GetVal(val_FontSize)
 
 -     # tcAudio
 
 -     global channel
 
 -     global freq
 
 -     tcAudioInit()    # 初始化 tcAudio
 
 -     channel = tcAudioOpen("04 EXIT (TV size ver.).wav")
 
 -     freq    = tcAudioGetFreq(channel)
 
  
- def Spectrum(fft):      # convert fft data to graph
 
 -     SPECWIDTH = 368
 
 -     SPECHEIGHT = 127
 
 -     BANDS = 20    # 将频谱平均分为20段
 
 -     bars = []
 
 -     b0 = 0
 
 -     for x in range(BANDS):
 
 -         peak = 0        # peak of a certain bar
 
 -         b1 = pow(2, x * 10.0 / (BANDS - 1))
 
 -         if b1 > 1023:
 
 -             b1 = 1023
 
 -         if b1 <= b0:
 
 -             b1 = b0 + 1    # make sure it uses at least 1 FFT bin
 
 -         while b0 < b1:
 
 -             if peak < fft[1 + b0]:
 
 -                 peak = fft[1 + b0]
 
 -             b0 += 1
 
 -         y = sqrt(peak) * 5 * SPECHEIGHT
 
 -         bars.append(y)
 
 -     return bars
 
  
- def tcaxPy_Fin():   # TCC 文件 < tcaxpy fin = true >
 
 -     tcAudioFin()    # 结束 tcAudio
 
  
- def tcaxPy_Main(_i, _j, _n, _start, _end, _elapk, _k, _x, _y, _a, _txt):
 
  
-     ASS_BUF  = []        # used for saving ASS FX lines
 
  
-     linedur = _end - _start      # 一句的时间长度,单位 10 毫秒
 
  
-     t0 = _start - 50 + _j * 7    # 逐字
 
 -     if _i == 0:
 
 -         t0 = _start + _j * 10    # 第一句的时间需要另外处理,否则 t0 会是负数
 
 -     t1 = t0 + 50
 
 -     t2 = _start + _elapk
 
 -     t3 = _start + _elapk + _k
 
 -     t4 = _end - 60 + _j * 7
 
 -     t5 = t4 + 50
 
  
-     if _i < 2:
 
 -         EFT1 = pos(_x, _y) + fad(0, 900) + alpha3(HexToDec('77')) + blur(5) + bord(5) + color1('FFFFFF') + t(bord(0))
 
 -         ass_main(ASS_BUF, SubL(t2, t2 + 100, 1), EFT1, _txt)    # K 效果:bord 渐变
 
 -         EFT2 = pos(_x, _y) + fad(500, 500) + bord(0) + color1('FFFFFF') + blur(1)
 
 -         ass_main(ASS_BUF, SubL(t0, t5, 0), EFT2, _txt)          # 文字主体
 
  
-     else:
 
 -         num = int(10 * linedur / framedur + 0.5)    # 一句的帧数
 
 -         for i in range(num):
 
 -             tcAudioSetPos(channel, tcAudioSec2Bytes(channel, (10 * _start + i * framedur) / 1000))    # 逐帧定位音频
 
 -             fft = tcAudioGetFFT(channel, 2048)
 
 -             bar = Spectrum(fft)[1]    # BEAT Detective,检测打击声;鼓声在音频的低频段;这需要尝试,直到达到最佳效果;这里选择 list 的第二个元素
 
 -             EFT = pos(_x, _y) + blur(sqrt(bar / 100) * 2.5) + bord(sqrt(bar / 100) * 2.5)             # 将音频图形化的一种方式,bord 和 blur 强度随着鼓声幅值而改变
 
 -             if _txt == '(' or _txt == ')':
 
 -                 EFT += fn("@SimHei") + frz(-90)     # 歌词中的日文括号,为了美观,需要旋转一下
 
 -             ts = _start + i * framedur / 10
 
 -             te = _start + (i + 1) * framedur / 10
 
 -             ass_main(ASS_BUF, SubL(ts, te, 1), EFT, _txt)
 
  
-         radiusx = int(_a / 2)
 
 -         radiusy = int(fontsize / 2)
 
 -         radius1 = min(radiusx, radiusy) + randint(10, 20)
 
 -         radius2 = max(radiusx, radiusy) + randint(20, 35)
 
 -         for j in range(0, 7, 2):                                   # K 效果,每个字绘制 4 次粒子
 
 -             for i in range(40):                                    # 每次绘制 40 个粒子
 
 -                 desx, desy = RandCir2(_x, _y, radius1, radius2)    # 随机圆环分布,返回的是元组,直接赋值即可,radius1 必须不大于 radius2;源代码见 tcaxPy.py
 
 -                 ts = t2 + _k * j / 10
 
 -                 te = ts + _k * 4 / 10
 
 -                 EFT = move(_x, _y, desx, desy) + color1('FFFFFF') + alpha1(0) + alpha3(0) + t(alpha1(255) + alpha3(255)) + bord(1) + blur(2)
 
 -                 ass_main(ASS_BUF, SubL(ts, te, 0, Pix_Style), EFT, DrawPoint())   # 注意粒子在下层,文字在上层
 
  
-     return (ASS_BUF, None)
 
  复制代码 |   
 
  
 |