vtt文件轉換成srt文件腳本

Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
set dir=fso.GetFolder(".")
fileType = "vtt"
newFileType = "srt"
For Each f In dir.Files
	fname = f.name
	dotIn = InStrRev(fname,".")
	strLen = Len(fname)
	endwith = Right(fname, strLen-dotIn)
	if endwith = fileType then
		Call convert2AnothorFile(dir,fname,newFileType)
	End if
Next
Wscript.Echo "完成"


function convert2AnothorFile(dir,fileName,fileType)
	Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
	Set re = New RegExp
	Set dotIn=Nothing
	Dim s, r
	dotIn = InStrRev(fname,".")
	newFile = Left(fname,dotIn)&fileType
	Set r = fso.CreateTextFile(newFile,true,true)
	s = LoadFile(dir+"\"+fileName)
	'msgBox s
	re.Pattern = "(:)([0-9]{2})([/.]{1})([0-9]{3})"
	re.Global = True
	s=re.Replace(s, "$1$2,$4")
	r.write s
	r.close
End Function


Function LoadFile(Path)
    Dim stm
    Set stm = CreateObject("ADODB.Stream")
    stm.Type = 2
    stm.Mode = 3
    stm.Open
	'Wscript.Echo path
    stm.LoadFromFile Path
    stm.Charset = "UTF-8"
    'stm.Charset = "Unicode"
    'stm.Charset = "GB2312"
    
    stm.position = 0
    LoadFile=stm.ReadText()
	'Wscript.Echo LoadFile
    stm.Close
    Set stm = Nothing
End Function
Wscript.quit


以上是一段VBScript腳本

作用:將vtt字幕文件替換爲srt字幕文件。主要是將文件中,毫秒前的點號改成逗號。

用法:在vtt文件所在的文件夾下,新建一個文本文件,粘貼以上代碼,保存。然後將文件後綴改成vbs,雙擊文件即可。

範圍:當前文件夾,不包含子文件夾

平臺:windows系統 win7

原理:使用正則表達式全局替換

缺陷:每個文件一次加載到內存中,緊適合於小的文件。vtt需要是有BOM的格式纔可以,不然LoadFile=stm.ReadText()這一行會報參數錯誤。

擴展:可以稍作修改,能用於批量修改其他文本文件內容。

效果:親測可用

介紹:本人對VB不熟悉,網上沒有現成的代碼。經過一個晚上從入門到折騰,才寫出這樣的腳本,有熟悉vb的,或知道更好寫法的朋友可以留言。

吐槽:Linux下就一條命令的事情,在windows下卻要搞這麼多事情。

正則表達式很醜,想用簡短點的式子,但是系統不支持,VB版本太低。

優點:Windows平臺不用裝其他軟件


使用中的bug:

1. 亂碼。亂碼可以修改一下stm.Charset = "UTF-8"的值,單引號“‘”在vb中是註釋。可選值有 "UTF-8"  "Unicode" "GB2312" "ANSI"等。

2. LoadFile=stm.ReadText()這一行報錯,可能是讀取的文件是空文件。

3. 文件開頭多幾個字符,stm.position = 0這裏修改一下數值,數值幾就表示跳過文件幾個字符。多的字符其實就是BOM頭,轉換後的文件是不帶BOM頭的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章