首页脚本ass2srt.vbs(ass/ssa批量转换srt的脚本)

ass2srt.vbs(ass/ssa批量转换srt的脚本)

时间2024-02-11 17:17:03发布访客分类脚本浏览1019
导读:收集整理的这篇文章主要介绍了ass2srt.vbs(ass/ssa批量转换srt的脚本 ,觉得挺不错的,现在分享给大家,也给大家做个参考。 iPad中的Oplayer只支持srt格式的字...
收集整理的这篇文章主要介绍了ass2srt.vbs(ass/ssa批量转换srt的脚本),觉得挺不错的,现在分享给大家,也给大家做个参考。

iPad中的Oplayer只支持srt格式的字幕,而动画一般使用的是ass/ssa格式的字幕,所以需要将ass/ssa批量转换srt。

GOOGLE了一下,在《ass2srt[ass/ssa批量转换srt]》中找到一个ass2srt.wsf脚本,内容如下:

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) 文件是一个包含可扩展标记语言(XML)代码的文本文档,它结合了若干功能,提高了脚本编程的灵活性。由于 Windows 脚本文件并不局限于特定的引擎,它们能够包含所有遵循 ActiveX(R)规范的脚本引擎的脚本。

上面的脚本文件同时包含了JScript和VBScript的代码。问题在于,有这个必要么?单纯用JScript或者VBScript都可以实现,为什么要混用不同的语言呢?JScript在代码中的作用仅仅是正则表达式而已,一个合理的推断是作者不会VBScript的正则表达式,或者嫌VBScript的正则表达式太麻烦。就算撇开语言混杂不说,上面代码的风格实在是不敢恭维。

下面是我写的ass2srt.vbs,也许比上面的代码好一点点罢。

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,然后将需要转换的ass/ssa字幕拖动到ass2srt.vbs脚本上即可。如果需要批量转换的ass/ssa字幕比较多,可以先把它们放到同一个文件夹里,然后直接双击运行ass2srt.vbs,选择字幕所在的文件夹即可。

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: ass2srt.vbs(ass/ssa批量转换srt的脚本)
本文地址: https://pptw.com/jishu/610088.html
自定义vbs脚本实现开机后延时启动指定程序的方法 Vbs脚本经典教材(最全的资料还是MSDN)

游客 回复需填写必要信息