『漫游』酷论坛>『字幕制作交流区』>[原创]ASS转SRT脚本(更 ..
[原创]ASS转SRT脚本(更新,支持所有编码)(BUG修正)
小飞@2005-06-12 16:28
由于看不惯subresync.exe转的SRT坐标乱伦
所以花了N小时搞定了这个
使用方法:
把下边的代码用记事本保存为.wsf
把要转换的ASS或SSA文件拖上来就是了
相对于subresync.exe的优点:
1,转换后保留{\pos(x,y)}
2,转换后保留Style Default
相对于subresync.exe的缺点
1,没有GUI
2,还有很多,等待你的弥补
3,...
4,...
注:输入输出文件均为utf-8
若要修改输入输出的为其他
用记事本打开,在3,4行找到
cInput和cOutput,
改成你想要的,如unicode,gb2312,big5
以及HKEY_CLASSES_ROOT\MIME\Database\Charset下的一切编码
如果不行,请去http://bbs.ktxp.com/read.php?tid=92214&page=e#a
V1046-R@2005-06-12 16:39
POPSUB直接转= =b
weilai@2005-06-12 18:01
不錯哦~
不過剛剛試了個UTF-8的 ass 結果變成亂碼 ※日文字
又改成 Unicode 轉不出內容,style 是當初的 .ass內容,且變成亂碼
轉成 DVD用的字幕會更好^^ (要求太過份了^^||)
其實是那個雙字元組造成的
VBScript 裡的字串運算都會自動轉成雙字元的
所以請善用
AscB、MidB、LenB
==================
個人前陣子寫的加解密腳本讓您參考
========加密=======
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fsot, ft
Dim ValCrypt
Dim BoolMsg
On Error Resume Next
ValCrypt = Cint(InputBox("請輸入加密密碼 ※需為大於等於100之正整數"))
BoolMsg = MsgBox("是否指定單一文件加密(答""否""的話就是使用 Crypt.List批次處理)",vbYesNoCancel,"指定加密文件")
If BoolMsg = vbNo Then
Set fsot = CreateObject("Scripting.FileSystemObject")
Set ft = fsot.OpenTextFile("Crypt.List", ForReading)
While Not ft.AtEndOfStream
ReadWriteFile ft.ReadLine
Wend
ElseIF BoolMsg = vbYes Then
ReadWriteFile InputBox("請輸入File完整名稱")
End IF
On Error GoTo 0
Sub ReadWriteFile(FileNameStr)
Dim fso, f1, f2, i
Dim NewText, ReadAllTextFile
Dim ValTristate
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.OpenTextFile(FileNameStr, ForReading, False, TristateUseDefault)
Set f2 = fso.OpenTextFile(FileNameStr, ForReading, False, TristateTrue)
ReadAllTextFile = f1.ReadAll
NewText = f2.ReadAll
If StrComp(ReadAllTextFile, NewText) Then
ValTristate = TristateUseDefault '開啟檔案為系統預設狀態
Else
ValTristate = TristateTrue 'Unicode
End If
f2.Close
NewText = Empty
ReadAllTextFile = StrReverse(ReadAllTextFile)
For i = 1 to LenB(ReadAllTextFile)
NewText = NewText + CStr(AscB(MidB(ReadAllTextFile, i, 1)) + ValCrypt)
Next
Set f1 = fso.OpenTextFile(FileNameStr + ".Crypt", ForWriting, True, ValTristate)
f1.Write NewText
End Sub
=======解密========
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fsot, ft
Dim ValCrypt
Dim BoolMsg
On Error Resume Next
ValCrypt = Cint(InputBox("請輸入當初設定之文件解密密碼(正整數)"))
BoolMsg = MsgBox("是否解密所有.Crypt文件(答""是""的話會根據Crypt.List文件列表;答""否""的話請輸入單一文件)",vbYesNoCancel,"指定解密文件")
If BoolMsg = vbYes Then
Set fsot = CreateObject("Scripting.FileSystemObject")
Set ft = fsot.OpenTextFile("Crypt.List", ForReading, False, TristateUseDefault)
While Not ft.AtEndOfStream
ReadWriteFile ft.ReadLine, ValCrypt
Wend
ElseIF BoolMsg = vbNo Then
ReadWriteFile InputBox("請輸入文件完整名稱"), ValCrypt
End IF
On Error GoTo 0
Sub ReadWriteFile(FileNameStr, ByValCrypt)
Dim fso, f1, f2, i
Dim NewText, ReadAllTextFile
Dim ValTristate, ValLen
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.OpenTextFile(FileNameStr + ".Crypt", ForReading, False, TristateUseDefault)
Set f2 = fso.OpenTextFile(FileNameStr + ".Crypt", ForReading, False, TristateTrue)
ReadAllTextFile = f1.ReadAll
NewText = f2.ReadAll
If StrComp(ReadAllTextFile, NewText) Then
ValTristate = TristateUseDefault '開啟檔案為系統預設狀態
Else
ValTristate = TristateTrue 'Unicode
End If
f2.Close
NewText = Empty
ValLen = Len(CStr(ByValCrypt))
For i = 1 to Len(ReadAllTextFile) Step ValLen
NewText = NewText + ChrB(CInt(Mid(ReadAllTextFile, i, ValLen))- ByValCrypt)
Next
NewText = StrReverse(NewText)
Set f1 = fso.OpenTextFile("Decode_" + FileNameStr, ForWriting, True, ValTristate)
f1.Write NewText
End Sub
小飞@2005-06-12 19:50
上边的脚本很是受教,已经研究并保存
另,想让VBS支持UTF-8真是比登天还难....
谁叫Script的输入只支持ANSI和UNICODE的文本呢,还有个DEFAULT等于没有.
如果不能BIN输入的话要支持UTF-8是不可能的,我想
即使再怎么用AscB、MidB、LenB也没办法,
只能等M$把WSH升到6.0了吧....
小飞@2005-06-12 19:53
另另: DVD字幕如果是文本文件的话理论上用脚本也可以转,但是……
关于POPSUB问题
之前不知道嘛,
反正写都写好了,
不发也浪费,
即使发了也浪费!
小飞@2005-06-12 19:59
后记:
第一次用JS和VBS混写脚本
感觉还真不错
用JS写正则很是方便
用VBS写文件输入输出是很顺手
weilai@2005-06-13 11:17
引用
最初由 小飞 发布
上边的脚本很是受教,已经研究并保存
另,想让VBS支持UTF-8真是比登天还难....
谁叫Script的输入只支持ANSI和UNICODE的文本呢,还有个DEFAULT等于没有.
如果不能BIN输入的话要支持UTF-8是不可能的,我想
即使再怎么用AscB、MidB、LenB也没办法,
只能等M$把WSH升到6.0了吧....
^^
您可以試試
用我寫的加密腳本
用一份 UTF-8 試試 (Unicode 也通)
會形成一個 ANSI 的加密文件 (Unicode 的源會變出一個 Unicode 的加密文件)
再用解密腳本
則
ANSI 的加密文件 會還原成 UTF-8 文件 (用FC 比較,結果當然是一模一樣)
(Unicode 的加密文件 會還原成 Unicode 文件,結果也是...)
所以 UTF-8 不是不可能的
至於要則麼做
您可以研究一下
kutinasi@2005-06-13 12:26
引用
最初由 V1046-R 发布
POPSUB直接转= =b
popsub不会去转STR坐标之类的, 统统忽略
V1046-R@2005-06-13 13:10
引用
最初由 kutinasi 发布
popsub不会去转STR坐标之类的, 统统忽略
原来如此.
我也去试试 下.
辛苦辛苦^^b
MeteorRain@2005-06-13 21:33
恩……我更喜欢用php命令行来写小脚本
不管是正规表达式还是文件输入输出或者是iconv,都是相当方便的……
ywang84@2005-06-14 05:42
多谢
不过这样的工具在网上已经有很多了吧
小飞@2005-06-16 09:37
引用
最初由 weilai 发布
^^
您可以試試
用我寫的加密腳本
用一份 UTF-8 試試 (Unicode 也通)
會形成一個 ANSI 的加密文件 (Unicode 的源會變出一個 Unicode 的加密文件)
再用解密腳本
則
ANSI 的加密文件 會還原成 UTF-8 文件 (用FC 比較,結果當然是一模一樣)
(Unicode 的加密文件 會還原成 Unicode 文件,結果也是...)
所以 UTF-8 不是不可能的
至於要則麼做
您可以研究一下
UTF-8话,您的脚本将会用ANSI的方式打开(因为UTF-8格式的英文字符和ANSI一样吧)
然后,就进行加密,不管里边的中文是如何的乱码
解迷的时候也解成乱码写进去
所以还是可以支持UTF-8的
因为您的脚本不需要对乱码解析
而我的脚本需要对乱码解析……
如今我也觉得是可能的,
但是看似工程量十分浩大!
我试试看吧……
小飞@2005-06-16 13:08
在GOOGLE上找到一个代码可以写UTF-8文件
吓了一跳!
with createobject("adodb.stream")
.Type=2
.Open
.Charset="utf-8"
.WriteText "a"
.savetoFile "a.txt"
end with
有空研究一下adodb.stream
相传他可以从网上下载文件……
小飞@2005-06-16 14:19
用ADO读文件:
with createobject("adodb.stream")
.Open
.Charset="utf-8"
.LoadFromFile("a.txt")
msgbox .readtext
end with
理论上可以支持HKEY_CLASSES_ROOT\MIME\Database\Charset下所有编码
就是有个缺点,不能readline……
小拿@2005-06-16 23:18
没有教材 郁闷! 程序一看就懂 可是没有语法呵函数接口指南啊
«12»共2页
| TOP