62,615
社区成员
发帖
与我相关
我的任务
分享
package com.subtitle;
import java.io.File;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.util.Arrays;
import java.util.Scanner;
/**
* 写本代码动机:本人买了个iStation u43 能看avi格式的,带字幕的AVI放不了,只能支持smi格式的字幕文件
* 前两天要看Prison Break,没字幕,所以就想要写这个程序来Convert一下了.
* 功能说明 :从srt字幕文件转换到 smi字幕格式的文件
* @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"));//smi字幕路径
Scanner sc=new Scanner(System.in);
System.setOut(os);//direct stdout to file
String head="<SAMI> <HEAD><STYLE TYPE=\"text/css\"></STYLE></HEAD> <BODY> ";
String boot="</BODY> \n </SAMI> ";
String start="<SYNC Start=";
String endStart=">";
String body="<P Class=ZHCC>";
System.out.println(head);
while(sc.hasNext()){
String str=sc.nextLine();
str=replaceLi(str);
// System.out.println(str);
if(str.length()<5)
continue;
// else if(str.split("-").length>0){
char c[]=str.toCharArray();
if(c.length>0&&c[0]=='0'){
String st[]=str.split("-");
String stt[]=st[0].split(",");
String re=calculateTime(stt[0]);
if(re.equals("0"))
re="";
System.out.println(start+re+stt[1]+endStart+body);
continue;
}
System.out.println(str);
System.out.println();
}
System.out.println(boot);
}
/**
*
* @param src 源字幕文件的内容,
* @return 把没用的符号去掉
*/
public static String replaceLi(String src){
src=src.replace("<i>","");
src=src.replace("</i>", "");
src=src.replace("-->", "-");
src=src.replace("</font>", "");
src=src.replace("<font color=\"#ffff00\">", "");
return src;
}
/**
* 计算时间
* @param str 过滤后的内容
* @return 返回每一句话的时间点.
*/
public static String calculateTime(String str){
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;
}
}
}