SRT 字幕时间调整程序,可以校正字幕与影片的时间

今天回来的早,一直考研复习,好长时间没碰程序了,

今天刚好想看个电影,AVI的不自带字幕,下个字幕时间还对不上,看着闹心,

字幕比说话时间慢个1秒左右。。。郁闷,找了两个字幕文件都不对,,决定

要自己写一个字幕时间校正的程序,也很简单,要么提前要么延后。只是为了

自己用,所以没用界面的,懂JAVA的自己弄就好了。。。

一会再发个SRT到SMI字幕格式的转换程序,好象没在空间里发。。正好一起发。。

下面是代码。。。

import java.io.File;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Scanner;
import java.util.regex.*;
/**
*   * 功能说明 :校正SRT字幕与影片不对应 * @author jongsuny
* @version 1.0
*/
public class Convert {
public static void main(String[] args) throws Exception {
   FileInputStream is = new FileInputStream("c:\sub.txt");//srt字幕源路径
   System.setIn(is);//direct stdin to file

   PrintStream os=new PrintStream(new File("c:\subout.txt"));//src字幕目的路径
   Scanner sc=new Scanner(System.in);
  
   System.setOut(os);//direct stdout to file
   Pattern p = Pattern.compile(" | Pattern.MULTILINE);   //时间格式的正则表达式,可以简化,但是懒得弄了。
   while(sc.hasNext()){
   String str=sc.nextLine();
   String str2="";
   boolean flag=false;
   Integer time=new Integer(-1200);
   Matcher m = p.matcher(str);
   while(m.find()) //如果是时间就进行转换
    {
    if(!flag)
     str2=calculateTime(m.group(),time);
    else
     str2+=" –> "+calculateTime(m.group(),time);
    flag=true;
   }
   if(flag)
   System.out.println(str2); //转换后的时间
   else
    System.out.println(str); //普通字幕
  
   }
}
public static String calculateTime(String str,Integer tt){
   String s="";
   s=calculateTime1(str.split(",")[0])+str.split(",")[1];
  
   return calculateTime2(s,tt);
}

public static String calculateTime1(String str){

//这个是10:20:00 这种时间转换为秒的函数
   try{
   Integer sum=new Integer(0);
   String[] time=str.split(":");
   sum=(Integer.valueOf(time[0])*3600+Integer.valueOf(time[1])*60+Integer.valueOf(time[2]));
   return String.valueOf(sum);
   }catch(Exception e){
    return str;
   }
}
public static String calculateTime2(String str,Integer time){

//时间校正,并返回转换后的正确的时间
   Integer t=new Integer(str);
   t+=time;
   String s1="",s2="",s3="",s4="";
   s4=""+t%1000;
   t=t/1000;
   s3=""+t%60;
   t=t/60;
   s2=""+t%60;
   t=t/60;
   s1=""+t%60;
   if(s4.length()==1)
    s4="00"+s4;
   if(s4.length()==2)
    s4="0"+s4;
   if(s3.length()==1)
    s3="0"+s3;
   if(s2.length()==1)
    s2="0"+s2;
   if(s1.length()==1)
    s1="0"+s1;
return s1+":"+s2+":"+s3+","+s4;

}

}

时间有点紧,结果还是看不成电影。。因为寝室马上没点了。。

因为时间关系,程序没考虑周到,也有可能存在BUG,希望网友指点。。

一会发SRT-》SMI格式的转换程序。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>