FFmpeg安装--命令--Java封装

来源:互联网 发布:智能算法优化 编辑:程序博客网 时间:2024/06/07 15:36

原文地址:http://blog.csdn.net/johnson_moon/article/details/53572897

简介


FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。


FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,现在由Michael Niedermayer维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。


源码git仓库:  https://git.ffmpeg.org/ffmpeg.git ffmpeg


(一)安装

1.Linux编译源码安装

解压源码包


定位到源码根路径(包含configure)


执行configure命令【./configure --enable-shared --prefix=/opt/ffmpeg】
如果编译报错,则执行【./configure --disable-yasm --enable-shared --prefix=/opt/ffmpeg】
其中,--prefix= 指定了安装路径


执行make命令进行编译,编译过程会持续一段时间

执行安装命令,持续一段时间


接着定位到安装目录的bin下,运行./ffmpeg但是报错


编辑/etc/ld.so.conf文件


将安装好的lib路径添加到文件中,保存


运行ldconfig命令使更改生效


执行命令成功,说明安装、配置成功


2.直接解压release包

下载系统对应的release包,直接解压即可执行
下载地址https://ffmpeg.org/download.html


A.Windows


B.Linux




(二)常用命令

[plain] view plain copy
  1. //分离视频流  
  2. ffmpeg -i input_file -vcodec copy -an output_file_video  
  3.   
  4.   
  5. //分离音频流  
  6. ffmpeg -i input_file -vcodec copy -vn output_file_audio  
  7.   
  8.   
  9. //转换格式  
  10. ffmpeg -i vedioPathName -ac 2 -r 29.97 vedioDestinationPathName  
  11.   
  12.   
  13. //截图  
  14. ffmpeg -i vedioPathName -y -f image2 -ss cutTime imageDestinationPathName  
  15.   
  16.   
  17. //-r 提取图像的频率,-ss 开始时间,-t 持续时间  
  18. //提取图片(组)  
  19. ffmpeg –i test.avi –r 1(可以是0.5 .etc) –f image2 image-%3d.jpeg  
  20.   
  21.   
  22. //剪切视频  
  23. ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi  
  24.   
  25.   
  26. //视频封装(合成)  
  27. ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file  
  28.   
  29.   
  30. //屏幕抓取,(截屏、屏幕录制等等)  
  31. ffmpeg -f gdigrab -i desktop out.mpg  
  32.   
  33.   
  34. //从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5  
  35. ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg  
  36.   
  37.   
  38. //生成GIF  
  39.   
  40. ffmpeg -i capx.mp4 -t 10 -s 320x240 -pix_fmt rgb24 jidu1.gif  


(三)Java封装

因为ffmpeg是C++开发的,所以Java基本无法对其进行封装,不过考虑到其在控制台下运行的特点,可以通过java的进程调用对其进行简单的图形化封装(实测效果不是很好,主要为了简化操作)。


Java调用外部进程的方式。



上图中,Progress对CommandBuilder以及Process进行简单的封装,主要的命令则在Executor类中封装成方法,如下图:



然后通过JavaFX可视化界面将操作搬到窗口中:


程序效果如下:


这样将常用的操作搬到可视化界面中,大大的简化了操作的复杂度。不过由于程序通过调用进程进行操作,在消息进度等方面会存在一些问题,比如主进程取不到子进程的输出信息(缓冲,没有输出到流),以及一些不可控因素等。
实测该程序在转换、视频截取合成和截屏录制功能上是没有问题的。


原创粉丝点击