我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();
}
}