国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > VBScript > 正文

ass2srt.vbs(ass/ssa批量轉(zhuǎn)換srt的腳本)

2020-07-26 11:45:46
字體:
供稿:網(wǎng)友

iPad中的OPlayer只支持srt格式的字幕,而動(dòng)畫一般使用的是ass/ssa格式的字幕,所以需要將ass/ssa批量轉(zhuǎn)換srt。

Google了一下,在《ass2srt[ass/ssa批量轉(zhuǎn)換srt]》中找到一個(gè)ass2srt.wsf腳本,內(nèi)容如下:

<job id="ass2srt">  <script language="JScript">  cInput="unicode";  // You can find them from:  cOutput="utf-8";  // HKEY_CLASSES_ROOT/MIME/Database/Charset  function rrr(){    re = /Dialogue: [^,.]*[0-9]*,([1-9]?[0-9]*:[0-9]*:[0-9]*.[0-9]*),([1-9]?[0-9]*:[0-9]*:[0-9]*.[0-9]*),[^,.]*,[^,.]*,[0-9]*,[0-9]*,[0-9]*,[^,.]*,(.*)/gi;    rv = ss.match(re);    t1 = RegExp.$1;    t2 = RegExp.$2;    t3 = RegExp.$3;    rg = //{[^}.]*(//pos/([0-9]*,[0-9]*/))[^}.]*}/gi;    t3 = t3.replace(rg,"$1" + "}");     rg =//{[^}.]*}/gi;    t3 = t3.replace(rg,"");    rg =/(//pos/([0-9]*,[0-9]*/)})/gi;    t3 = t3.replace(rg,"{" + "$1");     }  </Script>  <script language="VBScript">  set ad=CreateObject("adodb.stream")  set af=CreateObject("adodb.stream")  set ass=CreateObject("adodb.stream")  ad.open  af.open  ass.open  ad.Charset=cInput  af.Charset=cOutput  ass.Charset=cOutput  Set objArgs = WScript.Arguments  For I = 0 to objArgs.Count - 1    ad.LoadFromFile(objArgs(I))    z=0    gg=left(objArgs(I),len(objArgs(I))-3)&"srt"    Do While ad.eos <> True      ss =ad.ReadText(-2)      if left(ss,8)="Dialogue" then         ss=replace(ss,",,",",d,")        rrr        t3=replace(t3,"/n",vbcrlf)        t3=replace(t3,"/N",vbcrlf)        z=z+1        af.writetext z,1        af.writetext t1 & " --> " & t2,1        af.writetext t3 & vbcrlf & vbcrlf      else         ass.writetext ss,1      end if    Loop    af.savetofile gg,2    ass.savetofile gg&".style",2  Next  if i=0 then     msgbox "Please drag files to me!",,"Error!"  else    msgbox "Converted "&i&" file(s).",,"All Over!"  end if  </Script></job>

Windows 腳本 (.wsf) 文件是一個(gè)包含可擴(kuò)展標(biāo)記語言(XML)代碼的文本文檔,它結(jié)合了若干功能,提高了腳本編程的靈活性。由于 Windows 腳本文件并不局限于特定的引擎,它們能夠包含所有遵循 ActiveX(R)規(guī)范的腳本引擎的腳本。

上面的腳本文件同時(shí)包含了JScript和VBScript的代碼。問題在于,有這個(gè)必要么?單純用JScript或者VBScript都可以實(shí)現(xiàn),為什么要混用不同的語言呢?JScript在代碼中的作用僅僅是正則表達(dá)式而已,一個(gè)合理的推斷是作者不會VBScript的正則表達(dá)式,或者嫌VBScript的正則表達(dá)式太麻煩。就算撇開語言混雜不說,上面代碼的風(fēng)格實(shí)在是不敢恭維。

下面是我寫的ass2srt.vbs,也許比上面的代碼好一點(diǎn)點(diǎn)罷。

Option ExplicitConst Encoding = "unicode" 'assume unicode'Author: Demon'Website: http://demon.tw'Date: 2012/6/16Dim shell, folder, fso, ext, i, argsSet shell = CreateObject("Shell.Application")Set fso = CreateObject("scripting.filesystemobject")Set args = WScript.ArgumentsIf args.Count = 0 Then  Set folder = shell.BrowseForFolder(0, "請選擇ASS字幕所在的文件夾", 1)  If folder Is Nothing Then WScript.Quit  For Each i In fso.GetFolder(folder.Self.Path).Files    ext = LCase(fso.GetExtensionName(i.Path))    If ext = "ass" Or ext = "ssa" Then      ASS2SRT i.Path, Encoding    End If  NextElse  For i = 0 To args.Count - 1    ASS2SRT args(i), Encoding  NextEnd IfMsgBox CInt(i) & " file(s) Converted!", vbInformationFunction ASS2SRT(path, charset)  Const adTypeText = 2  Const adReadLine = -2  Const adSaveCreateOverWrite = 2  Dim ass, srt, re, str, arr, s, e, t, i    Set ass = CreateObject("ADODB.Stream")  Set srt = CreateObject("ADODB.Stream")  Set re = New RegExp    re.Global = True  re.IgnoreCase = True  re.Pattern = "/{.*?/}"    ass.Type = adTypeText  ass.Charset = charset  ass.Open  ass.LoadFromFile path    srt.Type = adTypeText  srt.Charset = "utf-8"  srt.Open    i = 0    Do Until ass.EOS    str = ass.ReadText(adReadLine)    If Left(str, 8) = "Dialogue" Then      i = i + 1      arr = Split(str, ",", 10)      s = "0" & arr(1) & "0" 'Start time      e = "0" & arr(2) & "0" 'End time      t = arr(9) 'Text      s = Replace(s, ".", ",")      e = Replace(e, ".", ",")      t = re.Replace(t, "")      t = Replace(t, "/n", vbCrLf)      t = Replace(t, "/N", vbCrLf)      srt.WriteText i & vbCrLf      srt.WriteText s & " --> " & e & vbCrLf      srt.WriteText t & vbCrLf & vbCrLf    End If  Loop    path = Left(path, Len(path) - 3) & "srt"  srt.SaveToFile path, adSaveCreateOverWriteEnd Function

把上面代碼保存為ass2srt.vbs,然后將需要轉(zhuǎn)換的ass/ssa字幕拖動(dòng)到ass2srt.vbs腳本上即可。如果需要批量轉(zhuǎn)換的ass/ssa字幕比較多,可以先把它們放到同一個(gè)文件夾里,然后直接雙擊運(yùn)行ass2srt.vbs,選擇字幕所在的文件夾即可。

原文:http://demon.tw/my-work/ass2srt.html

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新乡县| 错那县| 凌海市| 咸宁市| 洱源县| 绿春县| 德安县| 谢通门县| 枣阳市| 玉门市| 徐汇区| 华容县| 烟台市| 桂阳县| 新津县| 蒲江县| 长治市| 湘西| 南华县| 喜德县| 扶绥县| 无锡市| 普兰店市| 密云县| 麻城市| 平湖市| 台东市| 宁化县| 鹤山市| 峨山| 玉环县| 孝感市| 茌平县| 松江区| 山西省| 凤城市| 莱阳市| 营山县| 永胜县| 南投县| 鹤岗市|