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]

  

在线交谈

posted @ 2012-12-28 21:54  苏二  阅读(2353)  评论(4编辑  收藏  举报