windows下使用ffmpeg進行視頻轉碼,圖片拉取的Java測試代碼


 

什么是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]

  

在線交談


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM