Download sample SRT files
' Shift Subtitles in a SRT file
' Video
Set toolkit = CreateObject("VbsEdit.Toolkit")
files=toolkit.OpenFileDialog("","SRT Files (*.srt)|*.srt",False,"Open a subtitle file")
If UBound(files)<0 Then
Wscript.Quit
End If
source = files(0)
Set fso = CreateObject("Scripting.Filesystemobject")
If Not(fso.FileExists(source & ".bak")) Then
fso.CopyFile source,source & ".bak",False
End If
dest = files(0)
s = InputBox("Enter a number of seconds","Shift","0")
If s="" Then
Wscript.Quit
End If
If InStr(CStr(1/2), ".") > 0 Then
s=Replace(s,",",".")
Else
s=Replace(s,".",",")
End If
offset =CDbl(s)
from_time= ""
until_time = ""
shift_from=0
If from_time<>"" Then
shift_from = StringToSeconds(from_time)
End If
shift_until=10^8
If until_time<>"" Then
shift_until = StringToSeconds(until_time)
End If
Set WshShell = CreateObject("Wscript.Shell")
Set objOutput = CreateObject("ADODB.Stream")
objOutput.Charset = "utf-8"
objOutput.Type = 2
objOutput.Open
objOutput.LineSeparator = -1
Set objInput = CreateObject("ADODB.Stream")
objInput.Charset = toolkit.charset(source)
objInput.Type = 2
objInput.Open
objInput.LineSeparator = toolkit.lineseparator(source)
objInput.LoadFromFile source
Do While True
If Not(objInput.EOS) Then
num = objInput.ReadText(-2)
Else
Exit Do
End If
objOutput.WriteText num,1
If Not(objInput.EOS) Then
tt = objInput.ReadText(-2)
Else
Exit Do
End If
pos = InStr(tt," --> ")
arr1=Split(Left(tt,pos),":")
arr2=Split(Mid(tt,pos+5),":")
t1 = StringToSeconds(Left(tt,pos))
t2 = StringToSeconds(Mid(tt,pos+5))
If t1>shift_from And t1<shift_until Then
t1 = t1 + offset
t2 = t2 + offset
End If
objOutput.WriteText SecondsToString(t1) & " --> " & SecondsToString(t2),1
theText=""
Do While Not(objInput.EOS)
text = objInput.ReadText(-2)
objOutput.WriteText text,1
If text="" Then
Exit Do
End If
Loop
Loop
objInput.Close
objOutput.SaveToFile dest,2
objOutput.Close
Function SecondsToString(seconds)
Dim t
t=seconds
h=Int(t/3600)
t=t-h*3600
If Len(h)=1 Then
h="0" & h
End If
n= Int(t/60)
t=t-n*60
If Len(n)=1 Then
n="0" & n
End If
s = Int(t)
If Len(s)=1 Then
s="0" & s
End If
m=t-s
m=FormatNumber(m,3)
SecondsToString = h & ":" & n & ":" & s & "," & Mid(m,3)
End Function
Function StringToSeconds(str)
arr=Split(str,":")
t = arr(0)*3600 + arr(1)*60
s = Split(arr(2),",")
If UBound(s)>=0 Then
t = t + s(0)
If UBound(s)>=1 Then
t = t + s(1)/1000
End If
End If
StringToSeconds = t
End Function