0

跑步

/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)?

编辑:固定格式

4

2 回答 2

4

命令行 shell 为您做了一些魔法,但对您Runtime.exec()没有

在这种情况下,我猜外壳会解释(并省略)'命令行中的标记。

所以请尝试这个版本,其中'已被删除并且命令行已手动拆分为多个部分(另一个常见问题):

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);
于 2013-05-20T14:54:16.023 回答
1

请注意,有 aRuntime.exec(String) a 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);
        ...
}
于 2013-05-20T14:47:22.277 回答