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

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 Explicit
Const Encoding = "unicode" 'assume unicode

'Author: Demon
'Website: http://demon.tw
'Date: 2012/6/16

Dim shell, folder, fso, ext, i, args
Set shell = CreateObject("Shell.Application")
Set fso = CreateObject("scripting.filesystemobject")
Set args = WScript.Arguments

If 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
  Next
Else
  For i = 0 To args.Count - 1
    ASS2SRT args(i), Encoding
  Next
End If

MsgBox CInt(i) & " file(s) Converted!", vbInformation

Function 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, adSaveCreateOverWrite
End Function

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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ass
, ssa
, 批量转换
srt
srt ass ssa格式字幕、srt ass ssa、ssa转srt、ssa srt、ass ssa,以便于您获取更多的相关知识。

时间: 2024-10-25 21:41:39

ass2srt.vbs(ass/ssa批量转换srt的脚本)_vbs的相关文章

VBS调用Photoshop批量生成缩略图的代码_vbs

模仿腾讯新闻页,给KingCms添加了新闻页图片点播的代码,代码要求的图片点播格式如下: 0###yun_qi_img/@@@/small/123.gif@@@8标题一***yun_qi_img/@@@/small/456.gif@@@标题二***yun_qi_img/@@@/small/789.gif@@@标题三 格式解释如下: 0代表第0页出现图片点播: yun_qi_img/是第一幅原图地址./small/123.gif是第一幅缩略图地址,原图和缩略图名字一样,后缀不一样,原图是jpg,缩

用vbs通过135端口执行命令的脚本_vbs

wmiexec.vbs(通过135端口执行命令) 复制代码 代码如下: set ww=createobject("wbemscripting.swbemlocator")  set cc=ww.connectserver("172.20.241.218","root/cimv2","user","password")  Set pp=cc.get("Win32_Process")  pp

vbs版的解密base64加密的脚本_vbs

复制代码 代码如下: Function fDecode(sStringToDecode)  'This function will decode a Base64 encoded string and returns the decoded string.  'This becomes usefull when attempting to hide passwords from prying eyes.  Const CharList = "ABCDEFGHIJKLMNOPQRSTUVWXYZa

用vbs针对一个 IP 地址范围运行脚本_vbs

问: 嗨,Scripting Guy!我想在一个子网中的所有计算机上运行脚本.有没有办法不必将所有 IP 地址都硬编码到脚本中就能完成这项任务呢? -- RB 答: 嗨,RB.根据您在电子邮件中的描述,看来您的设置类似于:您的子网的 IP 地址范围为 192.168.1.1 到 192.168.1.254.您想创建一个脚本,可以先从第一个 IP 地址开始,在相应的计算机上运行某个代码,然后转到第二个地址,运行相同的代码,按地址顺序在每台计算机上都运行相同的脚本.此外,您想通过尽可能最少的代码行就

用vbs遍历文件并随机显示的脚本_vbs

set ws=createobject("wscript.shell") set fso=createobject("scripting.filesystemobject") set folder=fso.getfolder(ws.currentdirectory) set files=folder.files for each file in files d=d & file.name & "," next Randomize

vbs脚本实现批量转换文件编码_vbs

最近需要使用SourceInsight查看分析在Linux系统下开发的项目代码,我们知道Linux系统中文本文件默认编码格式是UTF-8,而Windows中文系统中的默认编码格式是Gb2312.系统内的编码格式有所区别倒无伤大雅,关键的是SourceInsight竟不支持UTF-8,导致项目代码内的中文注释全部乱码! 既然SourceInsight不支持UTF-8编码的文件,那我们就得想办法将UTF-8的代码文件转化为GB2312编码的.首先想到的是到网上搜一下"批量编码转换工具",结

Word文档批量转换成TXT格式的技巧

使用Word编辑文档的时候,不仅可以保存成Word格式,也可以保存为其它格式.但有的时候需要将大批的已经编辑完成的Word文档转换成文本格式或其他格式文档,怎么办?如果通过"另存为"将是一件十分费时费力的事情. 可能有人说了利用第三方工具软件吧,那是另一话题.在这里笔者要告诉大家的是:批量转换文档格式不求"人",完全可以借助Word本身自带的功能就可以完成批量转换文档格式的工作.为了叙述方便,专家以将Word文档格式批量转换成TXT文本格式为例来介绍其转换过程,具体

用Photoshop轻松实现批量转换

转换 应用目标:实现图像格式批量转换 应用工具:Photoshop 实现难度:★☆☆☆☆ 大家都知道,在利用Photoshop处理图像时,为了各种输出的需要,有时要把某些图像格式转换成为其他格式.在一般情况下,我们都用"文件/另存为"将某图片用另外的格式再存一份的方法来转换.但是如果有成百上千张图片需要进行格式转换,也这样一张张进行处理吗?当然不用,利用Photoshop的动作以及批处理功能,就可以很好地解决这个问题. 在这里我们以将"F:\图库"下的所有BMP格式

用Photoshop轻松实现图像批量转换

转换 大家都知道,在利用Photoshop处理图像时,为了各种输出的需要,有时要把某些图像格式转换成为其他格式.在一般情况下,我们都用"文件/另存为"将某图片用另外的格式再存一份的方法来转换.但是如果有成百上千张图片需要进行格式转换,也这样一张张进行处理吗?当然不用,利用Photoshop的动作以及批处理功能,就可以很好地解决这个问题. 在这里我们以将"F:\图库"下的所有BMP格式的图片转换成JPG格式为例来说明Phot oshop的动作功能. 认识动作功能 Ph