摄像机拍摄的mini DV格式的视频中有时间码,通过软件可以抽取其中的时间码生成DVDT文件。
由于低版本的PR是不支持直接从DV中抽取时间码生成字幕的,因此可以导出为SRT格式后,在PR里添加字幕。
对于后面对DV进行了剪辑,可以从DVDT文件中直接选取剪辑的部分进行转换。
'DV导出的DVDT中找出时间段,生成时间字幕SRT
'DVDT:
'00000001 03 05 17 10 51 03
'00000022
'SRT:
'1 序号
'00:00:00,000 --> 00:00:02,000 时长
'2022-03-01 文本
'空行
const myFPS=25 '视频每秒帧数
const myPreText="" '字幕文本开头前缀 可用<font color=red>、<i>、<u>、<br>、<b>
const myAddText="" '字幕文本结尾附加
const dvdtfilename="F:\软件测试\生成字幕\2003.10.4-1.dvdt" 'DVDT文件 可以选取其中一部分
const srtfilename="F:\软件测试\生成字幕\20031002.SRT" 'SRT字幕文件名
'运行前,请先配置上面的参数
Dim line,timeStr,curTime,curText
line=1
curTime="00:00:00,000"
dim fs,f1,f2,s1,s2
Set fs = CreateObject("Scripting.FileSystemObject")
set f1=fs.opentextfile(dvdtfilename)
set f2=fs.createtextfile(srtfilename,true)
s1=Split(f1.ReadLine," ")
If ubound(s1)=6 Then
do while f1.AtEndOfStream<>true
s2=Split(f1.ReadLine," ")
timeStr=curTime
curTime=getTime(curTime,s2(0)-s1(0))
timeStr=timeStr & " --> " & curTime
call wirteSrt(f2,line,timeStr,formatText(s1))
line=line+1
If ubound(s2)=6 Then
s1=s2
Else
Exit do
End if
loop
End if
f2.close
msgbox line & " SRT ok"
function formatText(s)
If s(1)<2000 Then s(1)=s(1)+2000
formatText=s(1) & "-" & s(2) & "-" & s(3) & " " & s(4) & ":" & s(5) & ":" & s(6)
end function
function formatDate(d)
formatDate=year(d) & "-" & right("0" & month(d),2) & "-" & right("0" & day(d),2)
end function
function formatTime(d)
formatTime=formatdatetime(d,4) & ":" & right("0" & second(d),2)
end function
function getTime(curTime,frames)
dim myInt,myDec
myInt=Int(frames/myFPS)
myDec=frames/myFPS-myInt
myDec=cint(split(curTime,",")(1))+cint(myDec*1000)
if myDec>=1000 then
myInt=myInt+1
myDec=myDec mod 1000
end If
getTime=formatTime(dateadd("s",myInt,cdate("2022-05-01 " & split(curTime,",")(0)))) & "," & right("000" & myDec,3)
end function
function wirteSrt(f,line,timeStr,curText)
f.writeline line
f.writeline timeStr
f.writeline curText
f.writeline ""
end function