首页 > 学院 > 编程设计 > 正文

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

2020-04-01 19:23:10
字体:
来源:转载
供稿:网友

这篇文章主要介绍了ass2srt.vbs一个ass/ssa批量转换srt的脚本,需要的朋友可以参考下

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

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

 

 
  1. <job id="ass2srt"
  2. <script language="JScript"
  3. cInput="unicode"// You can find them from: 
  4. cOutput="utf-8"// HKEY_CLASSES_ROOT/MIME/Database/Charset 
  5. function rrr(){ 
  6. 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; 
  7. rv = ss.match(re); 
  8. t1 = RegExp.$1; 
  9. t2 = RegExp.$2; 
  10. t3 = RegExp.$3; 
  11. rg = //{[^}.]*(//pos/([0-9]*,[0-9]*/))[^}.]*}/gi; 
  12. t3 = t3.replace(rg,"$1" + "}");  
  13. rg =//{[^}.]*}/gi; 
  14. t3 = t3.replace(rg,""); 
  15. rg =/(//pos/([0-9]*,[0-9]*/)})/gi; 
  16. t3 = t3.replace(rg,"{" + "$1");  
  17. </Script> 
  18. <script language="VBScript"
  19. set ad=CreateObject("adodb.stream"
  20. set af=CreateObject("adodb.stream"
  21. set ass=CreateObject("adodb.stream"
  22. ad.open 
  23. af.open 
  24. ass.open 
  25. ad.Charset=cInput 
  26. af.Charset=cOutput 
  27. ass.Charset=cOutput 
  28. Set objArgs = WScript.Arguments 
  29. For I = 0 to objArgs.Count - 1 
  30. ad.LoadFromFile(objArgs(I)) 
  31. z=0 
  32. gg=left(objArgs(I),len(objArgs(I))-3)&"srt" 
  33. Do While ad.eos <> True 
  34. ss =ad.ReadText(-2) 
  35. if left(ss,8)="Dialogue" then  
  36. ss=replace(ss,",,",",d,"
  37. rrr 
  38. t3=replace(t3,"/n",vbcrlf) 
  39. t3=replace(t3,"/N",vbcrlf) 
  40. z=z+1 
  41. af.writetext z,1 
  42. af.writetext t1 & " --> " & t2,1 
  43. af.writetext t3 & vbcrlf & vbcrlf 
  44. else  
  45. ass.writetext ss,1 
  46. end if 
  47. Loop 
  48. af.savetofile gg,2 
  49. ass.savetofile gg&".style",2 
  50. Next 
  51. if i=0 then  
  52. msgbox "Please drag files to me!",,"Error!" 
  53. else 
  54. msgbox "Converted "&i&" file(s).",,"All Over!" 
  55. end if 
  56. </Script> 
  57. </job> 

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

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

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

 

 
  1. Option Explicit 
  2. Const Encoding = "unicode" 'assume unicode 
  3.  
  4. 'Author: Demon 
  5. 'Website: http://demon.tw 
  6. 'Date: 2012/6/16 
  7.  
  8. Dim shell, folder, fso, ext, i, args 
  9. Set shell = CreateObject("Shell.Application"
  10. Set fso = CreateObject("scripting.filesystemobject"
  11. Set args = WScript.Arguments 
  12.  
  13. If args.Count = 0 Then 
  14. Set folder = shell.BrowseForFolder(0, "请选择ASS字幕所在的文件夹", 1) 
  15. If folder Is Nothing Then WScript.Quit 
  16. For Each i In fso.GetFolder(folder.Self.Path).Files 
  17. ext = LCase(fso.GetExtensionName(i.Path)) 
  18. If ext = "ass" Or ext = "ssa" Then 
  19. ASS2SRT i.Path, Encoding 
  20. End If 
  21. Next 
  22. Else 
  23. For i = 0 To args.Count - 1 
  24. ASS2SRT args(i), Encoding 
  25. Next 
  26. End If 
  27.  
  28. MsgBox CInt(i) & " file(s) Converted!", vbInformation 
  29.  
  30. Function ASS2SRT(path, charset) 
  31. Const adTypeText = 2 
  32. Const adReadLine = -2 
  33. Const adSaveCreateOverWrite = 2 
  34. Dim ass, srt, re, str, arr, s, e, t, i 
  35.  
  36. Set ass = CreateObject("ADODB.Stream"
  37. Set srt = CreateObject("ADODB.Stream"
  38. Set re = New RegExp 
  39.  
  40. re.Global = True 
  41. re.IgnoreCase = True 
  42. re.Pattern = "/{.*?/}" 
  43.  
  44. ass.Type = adTypeText 
  45. ass.Charset = charset 
  46. ass.Open 
  47. ass.LoadFromFile path 
  48.  
  49. srt.Type = adTypeText 
  50. srt.Charset = "utf-8" 
  51. srt.Open 
  52.  
  53. i = 0 
  54.  
  55. Do Until ass.EOS 
  56. str = ass.ReadText(adReadLine) 
  57. If Left(str, 8) = "Dialogue" Then 
  58. i = i + 1 
  59. arr = Split(str, ",", 10) 
  60. s = "0" & arr(1) & "0" 'Start time 
  61. e = "0" & arr(2) & "0" 'End time 
  62. t = arr(9) 'Text 
  63. s = Replace(s, "."","
  64. e = Replace(e, "."","
  65. t = re.Replace(t, ""
  66. t = Replace(t, "/n", vbCrLf) 
  67. t = Replace(t, "/N", vbCrLf) 
  68. srt.WriteText i & vbCrLf 
  69. srt.WriteText s & " --> " & e & vbCrLf 
  70. srt.WriteText t & vbCrLf & vbCrLf 
  71. End If 
  72. Loop 
  73.  
  74. path = Left(path, Len(path) - 3) & "srt" 
  75. srt.SaveToFile path, adSaveCreateOverWrite 
  76. End Function 

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表