运行
/usr/bin/mediainfo --Inform='Video;%Duration%' /home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv
来自终端的给我输出
903520
在java中运行它
Process p1;
try {
p1 = Runtime.getRuntime().exec("/usr/bin/mediainfo --Inform='Video;%Duration%' /home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv");
BufferedReader input1 = new BufferedReader(new InputStreamReader(p1.getInputStream()));
String line1;
while ((line1 = input1.readLine()) != null) {
System.out.println("-"+line1);
}
input1.close();
p1.waitFor();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
结果
-General
-Complete name : /home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv
-Format : Flash Video
-File size : 62.0 MiB
-Duration : 15mn 3s
-Overall bit rate : 576 Kbps
-Tagging application : Yet Another Metadata Injector for FLV - Version 1.4
-
-Video
-Format : AVC
-Format/Info : Advanced Video Codec
-Format profile : High@L2.0
-Format settings, CABAC : Yes
-Format settings, ReFrames : 4 frames
-Codec ID : 7
-Duration : 15mn 3s
-Bit rate : 512 Kbps
(much more here) ...
如何从Runtime.getRuntime()。exec(cmd)获取所需的输出(903520)?
编辑:修复格式
答案 0 :(得分:4)
命令行shell为你做了一些魔术,Runtime.exec()
为你做 NOT 。
在这种情况下,我想,shell会解释(并省略)命令行中的'
标记。
所以请尝试这个版本,其中'
已被删除,命令行已被手工分割成部分(另一个常见问题):
String[] args = new String[]{
"/usr/bin/mediainfo",
"--Inform=Video;%Duration%",
"/home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv"
};
Runtime.getRuntime().exec(args);
答案 1 :(得分:1)
请注意,Runtime.exec(String)
和为Runtime.exec(String[])
您是否尝试过第二种方法,只是为了确保字符串命令按照它的方式进行解释?
来自文档:
public Process exec(String command)
throws IOException
在单独的进程中执行指定的字符串命令。 (...)
public Process exec(String[] cmdarray)
throws IOException
在单独的进程中执行指定的命令和参数。 (...)
您可以尝试:
String[] myArgs = new String[]{
"/usr/bin/mediainfo",
"--Inform='Video;%Duration%'",
"/home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv"
};
Process p1;
try {
p1 = Runtime.getRuntime().exec(myArgs);
...
}