Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> VBA  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1701911
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

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

作者:cg1  摘自:access911.net  :cg1  更新日期:2007-12-22  浏览人次:

 

问题:

下了变形金刚超清晰版,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


字幕文件下载 http://access911.net/down/eg/transformers_srt.rar
 (40KB)
字幕处理示例下载(请用Word 2007打开) http://access911.net/down/eg/transformers_srt_WORD_program.rar
(26KB)

 


本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利