在公司加班1周,累的要命。周末回来放松下,看看 《里约大冒险》,下载下来竟然没字幕,遂上网搜索,下载了一个外挂字幕,翻译的乱七八糟,估计是用谷歌翻译或爱词霸翻译的。下载第2个一开始还行,越看越发现画面跟声音对不上,先出来声音三四秒之后才是相应的画面。怒!坚持继续看了会,英语水平不够,越到精彩的地方就越乱。实在受不了了。用记事本打开字幕文件,发现字幕文件跟歌词文件差不多,里面都标明了每一句话的时间。哈哈,这会就好办了,用程序把文件中所有的时间延后4秒不就得了么!旋即动手,遂成:
(ps:所用语言是java,若没有java编译、运行环境,请依照思路转行成别的语言编译执行。)
public static void main(String s[]) throws Exception{
FileReader fr=new FileReader("d:/1/[里约大冒险].Rio.2011.R5.LiNE.XviD-ViSiON1.srt");
BufferedReader br=new BufferedReader(fr);
String line="";
String reg= "(([01]//d)|(2[0-3])):[0-5]//d(:[0-5]//d)?";
//正则表达式来获取所有时间格式的字符串
Pattern regex=Pattern.compile(reg);
StringBuilder sb=new StringBuilder();
while((line=br.readLine())!=null){
StringBuilder line_sb=new StringBuilder(line);
Matcher regexMatcher = regex.matcher(line);
while (regexMatcher.find()) {
String s1= regexMatcher.group(0) ;
int start=regexMatcher.start(0);
int end=regexMatcher.end(0);
line_sb.replace(start, end, plus4(s1));
}
sb.append(line_sb);
sb.append('/n');
}
System.out.println(sb);
MyFileWriter(sb.toString());
}
//把时间延后4000毫秒;
static String plus4(String t){
SimpleDateFormat sdf=new SimpleDateFormat("HH:mm:ss");
long time=0;
try {
time = sdf.parse(t).getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Date date=new Date(time+4000);
return sdf.format(date) ;
}
//输出成文件
static void MyFileWriter(String s){
File f=new File("d://1//[里约大冒险].Rio.2011.R5.LiNE.XviD-ViSiON.srt");
try {
FileWriter fw=new FileWriter(f);
fw.write(s);
fw.flush();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}