什么是FFmpeg
FFmpeg是一個開源免費跨平台的視頻和音頻流方案,屬於自由軟件,采用LGPL或GPL許可證(依據你選擇的組件)。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多codec都是從頭開發的。
FFmpeg的功能
多媒體視頻處理工具FFmpeg有非常強大的功能包括視頻采集功能、視頻格式轉換、視頻抓圖、給視頻加水印等。
ffmpeg視頻采集功能非常強大,不僅可以采集視頻采集卡或USB攝像頭的圖像,還可以進行屏幕錄制,同時還支持以RTP方式將視頻流傳送給支持RTSP的流媒體服務器,支持直播應用。
FFmpeg轉碼時格式的支持問題
1.能支持的格式
ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
2.不能支持的格式
對ffmpeg無法解析的文件格式(wmv9,rm,rmvb等),可以先用別的工具(mencoder)轉換為avi(ffmpeg能解析的)格式.
Windows下測試ffmpeg實例代碼與教程
1.下載windows下的ffmpeg工具,解壓,筆者解壓到D盤,路徑[D:\ffmpeg.exe]
2.因為實例是通過調用批處理文件來進行windows下轉碼的,這樣測試比較簡單,所以建立對應的bat文件,
3.分別進行圖片拉取和視頻轉碼
編寫視頻圖片拉取的批處理文件ffmpegPic.bat,文件存放目錄[D:\ffmpegPic.bat]
內容如下:
start D:\ffmpeg.exe -i %1 -ss 15 -vframes 1 -r 1 -ac 1 -ab 2 -s 160*120 -f image2 %2 exit
參數說明
D:/ffmpeg.exe 是ffmpeg應用程序的存放路徑
%1 %2 和C語言有點相似是為傳參數保留位置
15 為要截取多少秒后的圖片
160*120 是截圖后的圖片大小為寬160高120
編寫視頻轉碼的批處理文件ffmpegVod.bat,文件存放目錄[D:\ffmpegVod.bat]
內容如下:
start D:\ffmpeg.exe -i %1 -ar 22050 -ab 56 -f flv -y %2 exit
參數說明
22050 是音頻采樣率
56 是音頻碼率
-f 是強制使用某種格式
flv是轉碼后的視頻格式
-y 覆蓋輸出文件,即如果文件已經存在的話,不經提示就覆蓋掉了
Ffmpeg參數說明 http://www.cnblogs.com/dennisit/archive/2012/12/29/2838297.html
然后運行下面的代碼,即可分別實現視頻圖片拉取和轉碼的功能.
1 package org.dennisit.ffmpegutil; 2
3 /**
4 * 5 * @version : 1.1 6 * 7 * @author : 蘇若年 <a href="mailto:DennisIT@163.com">發送郵件</a> 8 * 9 * @since : 1.0 創建時間: 2012-12-28 下午08:02:21 10 * 11 * @function: TODO 12 * 13 */
14
15 public class FfmpegTranscoding { 16
17 public static void main(String[] args) { 18
19 String videoPath = "D:/ffmpegvod/Wildlife.wmv"; //待處理的源視頻文件(輸入路徑)
20 String imageDistPath = "D:/ffmpegdemo/demo5.jpg"; //轉碼后的視頻文件(輸出路徑)
21 String videoDistPath = "D:/ffmpegdemo/dem5.flv"; //截圖的路徑(輸出路徑) 22
23 //ffmpegdemo文件夾必須物理存在
24
25 System.out.println("開始進行視頻轉碼..."); 26 try { 27 getVodTranscode(videoPath, videoDistPath); 28 } catch (Exception e) { 29 e.printStackTrace(); 30 } 31 System.out.println("視頻轉碼結束"); 32
33
34 System.out.println("開始進行圖片拉取..."); 35 try { 36 getVodScreenshot(videoPath, imageDistPath); 37 } catch (Exception e) { 38 e.printStackTrace(); 39 } 40 System.out.println("圖片截圖結束"); 41
42
43 } 44
45 /**
46 * 通過ffmpeg進行視頻截圖 47 * 48 * @param input 49 * 視頻文件地址 50 * @param output 51 * 截圖的視頻文件地址 52 * @throws Exception 53 */
54 public static void getVodScreenshot(String input,String output)throws Exception{ 55 try { 56 Runtime.getRuntime().exec("cmd /c start D:/ffmpegPic.bat " + input + " " + output); 57 } catch (Exception e) { 58 throw new RuntimeException("圖片拉取出現異常"); 59 } 60 } 61
62
63 /**
64 * 通過ffmpeg進行視頻轉碼 65 * 66 * @param input 67 * 視頻文件地址 68 * @param output 69 * 輸出文件地址 70 * @throws Exception 71 */
72 public static void getVodTranscode(String input, String output) throws Exception{ 73 try { 74 Runtime.getRuntime().exec("cmd /c start D:/ffmpegVod.bat " + input + " " + output); 75 } catch (Exception e) { 76 throw new RuntimeException("轉碼出現異常"); 77 } 78 } 79
80 }
欲行后,會在ffmpeg目錄下看到對應的轉碼后視頻和拉取的圖片.
Ffmpeg官網: http://ffmpeg.org/index.html
轉載請注明出處[http://www.cnblogs.com/dennisit/archive/2012/12/28/2837936.html]