網(wǎng)站域名自己做seocms
前言
最近兩周調(diào)研了一下字幕特效的底層程序邏輯,因為工作內(nèi)容的原因,就分享幾個自己找的鏈接具體細(xì)節(jié)就不分享了,CSDN也是我的個人筆記,只記錄一些簡單的內(nèi)容用于后續(xù)自己方便查詢,順便幫助一下正在苦苦查閱資料入門的路人。總體來說先利用Aegisub學(xué)習(xí)ASS文件的字幕特效標(biāo)簽,然后借助腳本編寫復(fù)雜的特效腳本,例如Python的pyonFX,以及c上位機python腳本的TCAX。Aegisub的lua腳本。如果是剪輯人員可以采用Pr+Ae以及剪映。本文章是程序化的字幕特效實現(xiàn)。
GITHUB pyonFX
Aegisub - 大神之路
關(guān)鍵字
字體添加背景
from pyonfx import *
import numpy as np
from PIL import Image
import math#https://stackoverflow.com/questions/50297272/how-to-draw-text-with-image-in-backgroundio = Ass("in.ass")
meta, styles, lines = io.get_data()
img_path = "d:\Download\CgdkT.png" fill_image = Image.open(img_path)
fill_image = fill_image.convert('RGBA')
fill_np = np.array(fill_image)
fill_width, fill_height = fill_image.sizedef romaji(line, l, fill_np, fill_width, fill_height):p_sh = Shape.rectangle()for syl in Utils.all_non_empty(line.syls):l.start_time = line.start_timel.end_time = line.end_timesyl_width = syl.widthsyl_height = syl.heightscale_x = fill_width / syl_widthscale_y = fill_height / syl_heightfor pixel in Convert.text_to_pixels(syl):x, y = math.floor(syl.left) + pixel.x, math.floor(syl.top) + pixel.yprint(x,y)x2, y2 = x, yalpha = ("\\alpha" + Convert.alpha_dec_to_ass(pixel.alpha) if pixel.alpha != 0 else "")img_x = int(pixel.x * scale_x) % fill_widthimg_y = int(pixel.y * scale_y) % fill_heightcolor = fill_np[img_y, img_x]color_bgr = "&H{:02X}{:02X}{:02X}&".format(color[2], color[1], color[0])l.text = f"{{\\p1\\an7\\1c{color_bgr}\\pos({x},{y}){alpha}}}{p_sh}"io.write_line(l)for line in lines:if not line.comment:romaji(line, line.copy(), fill_np, fill_width, fill_height)io.save()
io.open_aegisub()
#ALKOON
Tips:除了主顏色外,其它顏色設(shè)置為透明
基本字幕特效
lua語法
國語視界
TCAX
B站示例