我使用以下命令查找mp3文件的持续时间:
$ ffmpeg -i audiofile.mp3 2>& 1 | grep持续时间
持续时间:01:02:20.20,开始:0.000000,比特率:128 kb / s
如何使用Java代码(方法)从上面的结果中提取持续时间(01:02:20.20)?
提前致谢
安东尼
答案 0 :(得分:4)
如果您通过Runtime.exec
或ProcessBuilder
运行此命令,那么您可以运行:
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
}