工做過程當中有使用JAVA代碼獲取視頻碼率的場景,網上搜索了找到了利用ffmpeg來獲取,ffmpeg組件中有ffprobe是專門用來獲取視頻相關信息的。java
一、下載ffmpeg 官網:http://ffmpeg.org/,windows和linux版都有 解壓便可使用,linux下注意給ffprobe授予755權限。linux
二、準備程序json
第一步:獲取視頻格式信息windows
public static String getBitrate(String ffprobePath, String filePath) { String cmd = ffprobePath + " -v quiet -print_format json -show_format -i " + filePath; System.out.println(cmd); try { Runtime run = Runtime.getRuntime(); Process p = run.exec(cmd); BufferedInputStream in = new BufferedInputStream(p.getInputStream()); BufferedReader inBr = new BufferedReader(new InputStreamReader(in)); StringBuffer sb = new StringBuffer(); String lineStr; while ((lineStr = inBr.readLine()) != null) sb.append(lineStr); if (p.waitFor() != 0) { if (p.exitValue() == 1) System.err.println("命令執行失敗!"); } inBr.close(); in.close(); return analyseInfo(sb.toString()); } catch (Exception e) { e.printStackTrace(); } return ""; }
第二步:解析ffprobe返回的json結果,此處使用jackson解析app
private static String analyseInfo(String json) throws IOException { HashMap map = mapper.readValue(json, HashMap.class); Map format = (Map) map.get("format"); String bitrate = (String) format.get("bit_rate"); return bitrate; }
第三步、測試ide
@Test public void test_get_bit_rate(){ String file = "D:\\server\\1414079044194DAW1XHPV.flv"; //String file = "F:\\迅雷下載\\N間諜.BD1280高清特效中英雙字.mp4"; String ffprobe = "D:\\Soft\\ffmpeg\\bin/ffprobe.exe"; System.out.println(getBitrate(ffprobe , file)); }
第四步:測試結果測試
與經過迅雷影音看到的碼率基本一致:ui
附: ffprobe獲取的原始信息:code
{ "format": { "filename": "/root/tmp/1414079044194DAW1XHPV.flv", "nb_streams": 2, "nb_programs": 0, "format_name": "flv", "format_long_name": "FLV (Flash Video)", "start_time": "0.134000", "duration": "240.530000", "size": "11033501", "bit_rate": "366972", "probe_score": 100, "tags": { "encoder": "Lavf53.24.2" } } }