我mencoder用来分割文件,如果可能的话,我想把它变成一种面向对象的方法,例如使用 Java 或类似的方法。但我不确定最好的方法,所以我把它放在公开的地方。这是我需要的:
我有一个包含开始时间和结束时间的 excel 文件,我需要从视频文件中提取适当的剪辑。在终端(我在 Mac OS X 上)我已经成功使用,例如:
mencoder -ss 0 -endpos 10 MyVideo.avi -oac copy -ovc copy -o Output.avi
它通过剪辑 MyVideo.avi 视频的前 10 秒来创建视频 Output.avi。
但是,就像我说的,我想让一个程序从一个 excel 文件中读取,并为每个开始时间和结束时间多次(超过 100 次)调用这个 mencoder 命令。
我知道如何在 Java 中读取 excel 文件,但我不确定最好从 Java 调用此命令。另外,我希望能够看到的输出mencoder(因为它打印出一个很好的百分比,所以你知道单个命令需要多长时间)。这种类型的事情在 shell 脚本中可行吗?如果可能的话,我想really使用 Java,因为我在 Java 方面有多年的经验,而在 shell 脚本方面没有经验。
更新
这是我在 Java 中尝试过的,但它冻结在in.readLine()
File wd = new File("/bin");
System.out.println(wd);
Process proc = null;
try {
proc = Runtime.getRuntime().exec("/bin/bash", null, wd);
}
catch (IOException e) {
e.printStackTrace();
}
if (proc != null) {
BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
out.println("cd ..");
out.println("pwd");
String video = "/Users/MyFolder/MyFile.avi";
String output = "/Users/MyFolder/output.avi";
int start = 0;
int end = 6;
String cmd = "mencoder -ss " + start +
" -endpos " + end +
" " + video + " -oac copy -ovc copy -o " + output;
out.println(cmd);
try {
String line;
System.out.println("top");
while ((line = in.readLine()) != null) {
System.out.println(line);
}
System.out.println("end");
proc.waitFor();
in.close();
out.close();
proc.destroy();
}
catch (Exception e) {
e.printStackTrace();
}
}