FFmpeg安装、命令及Java封装讲解

简介

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编译源码安装

FFmpeg安装、命令及Java封装讲解_第1张图片
image.png

  • 解压源码包


    FFmpeg安装、命令及Java封装讲解_第2张图片
    image.png
  • 定位到源码根路径(包含configure)


    FFmpeg安装、命令及Java封装讲解_第3张图片
    image.png
执行configure命令【./configure --enable-shared --prefix=/opt/ffmpeg】

如果编译报错,则执行【./configure --disable-yasm --enable-shared --prefix=/opt/ffmpeg】

其中,--prefix= 指定了安装路径
FFmpeg安装、命令及Java封装讲解_第4张图片
image.png
  • 执行make命令进行编译,编译过程会持续一段时间


    FFmpeg安装、命令及Java封装讲解_第5张图片
    image.png
  • 执行安装命令,持续一段时间


    FFmpeg安装、命令及Java封装讲解_第6张图片
    image.png
  • 接着定位到安装目录的bin下,运行./ffmpeg但是报错


    FFmpeg安装、命令及Java封装讲解_第7张图片
    image.png
  • 编辑/etc/ld.so.conf文件


    FFmpeg安装、命令及Java封装讲解_第8张图片
    image.png
  • 将安装好的lib路径添加到文件中,保存


    FFmpeg安装、命令及Java封装讲解_第9张图片
    image.png
  • 运行ldconfig命令使更改生效


    FFmpeg安装、命令及Java封装讲解_第10张图片
    image.png
  • 执行命令成功,说明安装、配置成功

2.直接解压release包

下载系统对应的release包,直接解压即可执行

下载地址

A.Windows


FFmpeg安装、命令及Java封装讲解_第11张图片
image.png

FFmpeg安装、命令及Java封装讲解_第12张图片
image.png

FFmpeg安装、命令及Java封装讲解_第13张图片
image.png

B.Linux


FFmpeg安装、命令及Java封装讲解_第14张图片
image.png

FFmpeg安装、命令及Java封装讲解_第15张图片
image.png

(二)常用命令

[plain]view plaincopy

//分离视频流

ffmpeg-iinput_file-vcodeccopy-anoutput_file_video

//分离音频流

ffmpeg-iinput_file-vcodeccopy-vnoutput_file_audio

//转换格式

ffmpeg-ivedioPathName-ac2-r29.97vedioDestinationPathName

//截图

ffmpeg-ivedioPathName-y-fimage2-sscutTimeimageDestinationPathName

//-r提取图像的频率,-ss开始时间,-t持续时间

//提取图片(组)

ffmpeg–itest.avi–r1(可以是0.5.etc)–fimage2image-%3d.jpeg

//剪切视频

ffmpeg-ss0:1:30-t0:0:20-iinput.avi-vcodeccopy-acodeccopyoutput.avi

//视频封装(合成)

ffmpeg–ivideo_file–iaudio_file–vcodeccopy–acodeccopyoutput_file

//屏幕抓取,(截屏、屏幕录制等等)

ffmpeg-fgdigrab-idesktopout.mpg

//从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5

ffmpeg-fgdigrab-framerate5-offset_x10-offset_y20-video_size640x480-idesktopout.mpg

//生成GIF

ffmpeg-icapx.mp4-t10-s320x240-pix_fmtrgb24jidu1.gif

(三)Java封装

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


FFmpeg安装、命令及Java封装讲解_第16张图片
image.png

Java调用外部进程的方式。


FFmpeg安装、命令及Java封装讲解_第17张图片
image.png

上图中,Progress对CommandBuilder以及Process进行简单的封装,主要的命令则在Executor类中封装成方法,如下图:
FFmpeg安装、命令及Java封装讲解_第18张图片
image.png

FFmpeg安装、命令及Java封装讲解_第19张图片
image.png

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


FFmpeg安装、命令及Java封装讲解_第20张图片
image.png

程序效果如下:
FFmpeg安装、命令及Java封装讲解_第21张图片
image.png

这样将常用的操作搬到可视化界面中,大大的简化了操作的复杂度。不过由于程序通过调用进程进行操作,在消息进度等方面会存在一些问题,比如主进程取不到子进程的输出信息(缓冲,没有输出到流),以及一些不可控因素等。

实测该程序在转换、视频截取合成和截屏录制功能上是没有问题的。

你可能感兴趣的:(FFmpeg安装、命令及Java封装讲解)