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]