一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - VBS - ass2srt.vbs(ass/ssa批量轉(zhuǎn)換srt的腳本)

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

2020-08-15 16:32VBS教程網(wǎng) VBS

這篇文章主要介紹了ass2srt.vbs一個(gè)ass/ssa批量轉(zhuǎn)換srt的腳本,需要的朋友可以參考下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<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è)合理的推斷是作者不會(huì)VBScript的正則表達(dá)式,或者嫌VBScript的正則表達(dá)式太麻煩。就算撇開語言混雜不說,上面代碼的風(fēng)格實(shí)在是不敢恭維。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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, "請(qǐng)選擇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,然后將需要轉(zhuǎn)換的ass/ssa字幕拖動(dòng)到ass2srt.vbs腳本上即可。如果需要批量轉(zhuǎn)換的ass/ssa字幕比較多,可以先把它們放到同一個(gè)文件夾里,然后直接雙擊運(yùn)行ass2srt.vbs,選擇字幕所在的文件夾即可。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人久视频免费 | 60老妇性xxxxhd | 四虎影院的网址 | 操日日| 三级网站午夜三级 | 热久久最新网址 | 四虎影视国产精品婷婷 | 激情小视频| 好大用力深一点视频 | 无码专区aaaaaa免费视频 | 太大了轻点阿受不了小说h 四色6677最新永久网站 | 古装全套 毛片 | 亚洲天堂一区二区在线观看 | 精品亚洲综合在线第一区 | 调教全程肉动画片在线观看 | naruto tube18动漫 mm131亚洲精品久久 | 午夜视频一区 | chinesexxxxhd人妖 chinesespanking调教 | 成人天堂入口网站 | 免费看60分钟大片视频播放 | kayden kross喷水| 日韩毛片免费在线观看 | 草草视频在线免费观看 | 日本三级s级在线播放 | 青青草国产精品久久碰 | 亚洲国产高清一区二区三区 | 插得爽| 亚洲国产成人资源在线桃色 | 赤坂丽女医bd无删减在线观看 | 高跟丝袜人妖sissy露出调教 | 亚洲高清色图 | 国产精品视频自拍 | 国产123区在线视频观看 | 免费视频 久久久 | 国产欧美精品专区一区二区 | 99精品久久精品一区二区小说 | 我的年轻漂亮继坶三级 | jizz 日本亚洲| 无人区大片免费播放器 | 亚洲一区二区成人 | 黑人草 |