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