会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > 模块函数VBA > 正文

Access字符串函数处理srt字幕时间

时间:2009-04-10 10:57 来源:access911.net 作者:cg1 阅读:

字幕下载问题:

下了变形金刚超清晰版,2个文件,每个4.5G,太爽了!!!
可是字幕竟然是一个 *.srt ,没切过,看起来不爽,看来原来应该是整个头的 9G 大的电影。
网上找了n多软件,要么操作太复杂,要么不能字幕向前退 1小时14分38秒的。
有啥办法手动处理?

 


回答:

 

 

 

 



干脆直接用 EXCEL 或者 WORD 写了一个程序,直接COPY 到模块里面运行算了。
效果还不错,呵呵。
Function SplitTheTransformerMovice()
'记得引用 Microsoft Scripting Runtime

    Dim fso As New FileSystemObject
    Dim txt As TextStream
    Dim txt2 As TextStream
    Dim strT1 As String
    Dim strT2 As String
    Dim secondsAdd As Long
    Dim msecondsAdd As Long
    Dim sourceTitleFile As String
    Dim targetTitleFile As String
    
    
    secondsAdd = (1 * 3600 + 14 * 60 + 38) * -1
    msecondsAdd = -350
    sourceTitleFile = "E:\dvd\11.02.07.Transformers.2007.DiVX6.DTS.2ADUDiO.HD.DVDRiP-CHD\chd-transformers-dts-2audio-hd-dvdrip-disc2.chs.srtold"
    targetTitleFile = "E:\dvd\11.02.07.Transformers.2007.DiVX6.DTS.2ADUDiO.HD.DVDRiP-CHD\chd-transformers-dts-2audio-hd-dvdrip-disc2.chs.srt"
    
    
    
    Set txt = fso.OpenTextFile(sourceTitleFile, ForReading, False)
    Set txt2 = fso.OpenTextFile(targetTitleFile, ForWriting, True)
    Dim strLine
    Do Until txt.AtEndOfStream = True
        strLine = txt.ReadLine
        If IsDate(Mid(strLine, 1, 8)) = True And IsDate(Mid(strLine, 18, 8)) = True Then
            strT1 = Mid(strLine, 1, 12)
            strT2 = Mid(strLine, 18, 12)
            strLine = dateAdd_Srt(strT1, secondsAdd, msecondsAdd) & " --> " & dateAdd_Srt(strT2, secondsAdd, msecondsAdd)
        End If
        txt2.WriteLine strLine
    Loop
    
    txt.Close
    txt2.Close
    Set fso = Nothing
    
    
End Function

'只用于调整 *.srt 字幕文件中的时间
Function dateAdd_Srt(ByVal timeString As String, ByVal seconds As Long, ByVal milliseconds As Long) As String
    Dim dteTime As Date
    Dim lngMS As Long
    dteTime = CDate(Mid(timeString, 1, 8))
    lngMS = CLng(Mid(timeString, 10, 3))
    
    dteTime = DateAdd("s", seconds, dteTime)
    
    If milliseconds > 0 Then
        If (lngMS + milliseconds) > 999 Then
            lngMS = (lngMS + milliseconds) Mod 1000
            dteTime = DateAdd("s", 1, dteTime)
        Else
            lngMS = lngMS + milliseconds
        End If
    Else
        If (lngMS + milliseconds) < 0 Then
            lngMS = (lngMS + milliseconds) Mod 1000
            dteTime = DateAdd("s", -1, dteTime)
        Else
            lngMS = lngMS + milliseconds
        End If
        lngMS = Abs(lngMS)
        
    End If
    
    dateAdd_Srt = Format(dteTime, "hh:nn:ss") & "," & Format(lngMS, "000")
    
End Function

字幕文件下载

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: