从字符串中仅提取部分(持续时间)

时间:2010-09-16 13:29:06

标签: java

我使用以下命令查找mp3文件的持续时间:

$ ffmpeg -i audiofile.mp3 2>& 1 | grep持续时间

持续时间:01:02:20.20,开始:0.000000,比特率:128 kb / s

如何使用Java代码(方法)从上面的结果中提取持续时间(01:02:20.20)?

提前致谢

安东尼

5 个答案:

答案 0 :(得分:4)

如果您通过Runtime.execProcessBuilder运行此命令,那么您可以运行:

ffmpeg -i audiofile.mp3 2>&1 | grep Duration | cut -d, -f1 | cut -d' ' -f2

直接获取持续时间,而不是在Java中进行解析。

答案 1 :(得分:3)

String str = Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s

int startIndex = str.indexOf(":");  
int endIndex = str.indexOf(",");

str.subString(startIndex,endIndex); //your result  
str.trim();

注意:假设格式保持不变

答案 2 :(得分:2)

正则表达式是一个很好的起点。

答案 3 :(得分:2)

String.split:)

String duration = result.split("[ ,]")[1];

这会分隔空格或逗号。

答案 4 :(得分:2)

如果要在计算中使用时间,则需要解析组成部分。

String string = "Duration: 01:02:20.20, start: 0.000000, bitrate: 128 kb/s";

// This expects 3 millisecond digits, as specified by [ffmpeg docs]*, though
// sample only has 2... maybe it's variable - adjust as needed
Pattern p = Pattern.compile("([0-9]{2}):([0-9]{2}):([0-9]{2})(?:\\.([0-9]{3}))?");
Matcher m = p.matcher(string);

if (m.find()) {
    int h = Integer.parseInt(m.group(1));
    int m = Integer.parseInt(m.group(2));
    int s = Integer.parseInt(m.group(3));
    int ms = Integer.parseInt(m.group(4));
    // do some time math
}

ffmpeg docs