業務需求:對上傳的視訊顯示該時長。
FFmpeg官網:http://ffmpeg.org/
我在這篇五分鐘JAVA程式碼教會你:FFmpeg實現視訊試看(window版本)中寫的十分詳細,在windows/Linux安裝FFmepg,此處我就不過多闡述了。
在window中安裝FFmpeg後,在cmd執行獲取時長的命令即可:
F:\ffmpegDemo\ffmpeg\bin\ffmpeg.exe -i F://ffmpegDemo//test.mp4
PS:解壓在windows原生的ffmpeg程式F:\ffmpegDemo\ffmpeg\bin\ffmpeg.exe以及存放在windows本地視訊:F://ffmpegDemo//test.mp4
執行效果,如下:
通過FFmpeg執行命令列,獲取返回的視訊資訊,通過java篩選到視訊資訊的目標資料,進行返回即可。
public static void main(String[] args) {
String timeLength = getVideoTime("F://ffmpegDemo//test.mp4","F:\\ffmpegDemo\\ffmpeg\\bin\\ffmpeg.exe");
if(timeLength.length()>0){//字串擷取
timeLength =timeLength.substring(0,timeLength.indexOf("."));
}
System.out.println("視訊時長:"+timeLength);
}
public class ExecWindowCMD {
public static void main(String[] args) {
String timeLength = getVideoTime("F://ffmpegDemo//test.mp4","F:\\ffmpegDemo\\ffmpeg\\bin\\ffmpeg.exe");
if(timeLength.length()>0){//字串擷取
timeLength =timeLength.substring(0,timeLength.indexOf("."));
}
System.out.println("視訊時長:"+timeLength);
}
/**
*獲取視訊時間
* @param video_path 視訊路徑
* @param ffmpeg_path ffmpeg安裝路徑
* @return
*/
public static String getVideoTime(String video_path, String ffmpeg_path) {
List<String> commands = new java.util.ArrayList<String>();
commands.add(ffmpeg_path);
commands.add("-i");
commands.add(video_path);
System.out.println("命令列:"+ffmpeg_path+" -i "+video_path);
try {
ProcessBuilder builder = new ProcessBuilder();
builder.command(commands);
final Process p = builder.start();
//從輸入流中讀取視訊資訊
BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
//從視訊資訊中解析時長
String regexDuration = "Duration: (.*?), start: (.*?), bitrate: (\\d*) kb\\/s";
Pattern pattern = Pattern.compile(regexDuration);
Matcher m = pattern.matcher(sb.toString());
if (m.find()) {
//System.out.println(video_path+",視訊時長:"+m.group(1)+", 開始時間:"+m.group(2)+",位元率:"+m.group(3)+"kb/s");
return m.group(1);
}
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
}
執行效果如下:
視訊原始檔: