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:[email protected]">发送邮件</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]

  

在线交谈

你可能感兴趣的:(windows)