特效字幕製作工具 SubFX(暫定名稱)
本帖最后由 3j29cd 于 2019-10-14 18:57 编辑這工具的核心是Yutils的c++改寫版
目的是為了要能更方便的製作特效字幕
目前前台是接python
如果你不喜歡python 可以自己綁到其他程式語言
核心函式庫沒有任何一行用到python的api
主要前端是SubFXCLI (目前沒有GUI版)
只要把設定檔(json)拖放到exe上面 就會自動生成特效字幕
設定檔各個欄位的說明如下
名稱 資料類型說明
subtitle字串 你要輸入的字幕檔的檔名,編碼只接受沒有BOM的UTF-8
logFile字串 紀錄檔的存檔位置
outputFile字串 要輸出的字幕檔的名稱
scripts陣列 各個特效腳本的設定
scripts也是儲存json 各個欄位的說明如下
名稱 資料類型 說明
script字串特效腳本的檔名 下面會詳細說明
mode字串特效要以哪種方式套用 下面會詳細說明
startLine數字要從字幕哪一行開始套用特效 第一行的編號為0 以此類推
endLine數字 要在那一行結束套用特效 如果這數字小於0 就套用到整份字幕
設定檔範例:
{
"subtitle": "test.ass",
"logFile": "test.log",
"outputFile": "test_out.ass",
"scripts":
[
{
"script": "effect1.py",
"mode": "line",
"startLine": 0,
"endLine": -1
},
{
"script": "M:/path/to/your/effect2.py",
"mode": "syl",
"startLine": 2,
"endLine": 5
}
]
}
關於mode的說明
mode可以是line syl word char
line syl char的意思和aegisub的karaoke template一樣
word的意思是在每個文字特用特效
例如:
I'm drinking tea.
此時word就會拆解成 "I'm", "drinking", "tea."
關於特效腳本的內容
這裡面必須包含"SubFXMain"這函數
內容範例:from tcaxPy import *
def SubFXMain(line, currentSymbol):
assBuf = []
timeStart = line["start_time"]
timeEnd = line["end_time"]
effect = fad(300, 300)
ass_main(assBuf, SubL(timeStart, timeEnd, 0, 'default'), effect, line["text"])
return assBufSubFXMain有兩個參數
line:當前作用行 是個dictionary 內容是Yutils的PARSER.dialogs(true)的返回值的內容拿掉syls words和chars這三個entries
會拿掉syls words和chars這三個entries的原因是防止有人誤觸造成非預期的結果
currentSymbol:
如果在設定檔中指定mode為line時 這會帶入空的list 沒有實質作用
在其他mode 這裡會帶入當前的symbol的dictionary
內容是Yutils的PARSER.dialogs(true)的返回值的內容的chars, words或syls(視mode決定)的table的元素
當前要作用的table才會帶入
SubFXMain要返回一個python的string list
這最後將數據序列化成ass時會用到
為了方便 可以直接調用SubL和ass_main這兩個函數來建構需要的string
這兩個函數定義在tcaxPy.py裡面
詳細可以參考TCAX的文檔
範例中腳本的作用是讓每行文字淡入淡出
其餘的還有個CoreLibPy 這就是個Yutils的修改版
主要是ass的反序列化 數學相關函數 基本的像素化(例如: 像素字)
詳細有什麼函數 可以在python中用help去看
程式源代碼在這裡
歡迎PR或提供意見或建議
壓縮包裡的icudt65.dll icuin65.dll和icuuc65.dll是來自於這裡
tcaxPy.py是來自於TCAX 內容經過修改
附件是windows的預編譯版
需要搭配python3.7或更新版
页:
[1]