前言
最近项目组有针对视频剪辑的功能需求,主要是通过后台上传的视频文件之后,然后需要根据时间剪辑对应的片段用于在相应的页面显示,之前一直没有针对视频文件处理相应的经验,印象中这个视频处理应该是在客户端进行处理的,类似现在很火的抖音、快手等增加各种剪辑、合并等。在网上一看发现服务端也有对应的解决方案。
类似阿里云的视频剪辑: https://helpcdn.aliyun.com/document_detail/101562.html
七牛: https://developer.qiniu.com/dora/api/1246/audio-and-video-stitching-avconcat
以上这些是需要收费的;后来发现ffmpeg这个剪辑工具也能满足相应的需求;
即在服务器上按照ffmpeg这个功能键,然后通过Java代码去执行相应的命令,检测是否剪辑完即可;
环境准备&安装文件
安装文件下载
打开官网地址,进入下载页:https://ffmpeg.org/download.html#build-linux
选择Linux版本点击进入下载对应的版本,或者直接执行以下命令下载最新版本
1 | wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz |
安装配置
以下为下载文件:
默认下载是xz结尾的文件,这里需要通过以下命令执行下
1 | xz -d ffmpeg-git-amd64-static.tar.xz |
然后执行解压命令
1 | tar -xvf ffmpeg-git-amd64-static.tar |
解压完成后就是上图中的ffmpeg-git-20191202-amd64-static目录,这里说明下ffmpeg它只是一个执行工具,是不需要启动的。个人倒腾了好久以为是要启动它,实际上它就是一个工具,解压然后通过命令执行即可
配置命令全局使用
1 | cd /usr/bin |
命令剪辑验证
1 | ffmpeg -ss 00:00:00 -t 00:00:10 -i 1050.mp4 -vcodec copy -acodec copy output.mp4 |
以上通过ffmpeg命令剪辑一个视频文件1050.mp4,从开始00:00:00截取到00:00:10结束,相当于截取这个视频文件的前10秒,最后输出output.mp4文件
1 | ffmpeg -i /sx/nfs/upload/video/2019/11/12/4ecff05aacd2488ba13f3888649b2bd6.mp4 -ss 1 -f image2 /sx/nfs/upload/video/2019/11/12/1576054920486.png |
裁剪图片,把一个视频剪辑成对应的图片帧集合
Java代码执行ffmpeg命令
Java语言通过Process系统类去执行相应的命令,然后返回对应的结果
1 | public boolean transfer() { |