1、下载
打开官网地址,进入下载页:https://ffmpeg.org/download.html#build-linux,选择你需要的i686平台
或者wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-i686-static.tar.xz
2、安装(解压)
wuhao@wuhao:~/workspace/ffmpegPg$ ls
ffmpeg ffmpeg-release-i686-static.tar.xz
wuhao@wuhao:~/workspace/ffmpegPg$
wuhao@wuhao:~/workspace/ffmpegPg$ xz -d ffmpeg-release-i686-static.tar.xz
wuhao@wuhao:~/workspace/ffmpegPg$ ls
ffmpeg ffmpeg-release-i686-static.tar
wuhao@wuhao:~/workspace/ffmpegPg$ tar xvf ffmpeg-release-i686-static.tar
wuhao@wuhao:~/workspace/ffmpegPg$ cd ffmpeg-4.3.1-i686-static/
wuhao@wuhao:~/workspace/ffmpegPg/ffmpeg-4.3.1-i686-static$ ls
ffmpeg ffprobe GPLv3.txt manpages qt-faststart readme.txt
wuhao@wuhao:~/workspace/ffmpegPg/ffmpeg-4.3.1-i686-static$ ll
总用量 95308
drwxr-xr-x 3 wuhao wuhao 4096 7月 22 11:53 ./
drwxrwxr-x 4 wuhao wuhao 4096 11月 26 09:07 ../
-rwxr-xr-x 1 wuhao wuhao 48529212 7月 22 11:53 ffmpeg*
-rwxr-xr-x 1 wuhao wuhao 48393148 7月 22 11:53 ffprobe*
-rw-r--r-- 1 wuhao wuhao 35147 7月 22 11:53 GPLv3.txt
drwxr-xr-x 2 wuhao wuhao 4096 7月 22 11:53 manpages/
-rwxr-xr-x 1 wuhao wuhao 616580 7月 22 11:53 qt-faststart*
-rw-r--r-- 1 wuhao wuhao 2084 7月 22 11:53 readme.txt
wuhao@wuhao:cd /usr/bin
wuhao@wuhao:/usr/bin$ sudo ln -s /home/wuhao/1.0TB.1/workspace/ffmpegPg/ffmpeg-4.3.1-i686-static/ffmpeg ffmpeg
wuhao@wuhao:/usr/bin$ sudo ln -s /home/wuhao/1.0TB.1/workspace/ffmpegPg/ffmpeg-4.3.1-i686-static/ffprobe ffprobe
3、使用教程
FFmpeg 视频处理入门教程http://www.ruanyifeng.com/blog/2020/01/ffmpeg.html
4、实例
一、获取视频信息
ffmpeg -i 课程介绍.avi //查看本地的视频信息
二、分离视频音频流
ffmpeg -i origin_file -vcodec copy -an output_file_video //分离视频流
ffmpeg -i origin_file -acodec copy -vn output_file_audio //分离音频流
ffmpeg -i origin.mp4 -an output.mp4 //去掉视频中的音频
ffmpeg -i origin.avi -vcodec copy -an output.avi //去掉视频中的音频
三、视频转码相关
ffmpeg -i 课程介绍.h264 -vcodec copy -f mp4 课程介绍output.mp4//h264视频转mp4
ffmpeg -i 课程介绍.mp4 -b:v 640k 课程介绍output.flv //mp4转flv
ffmpeg -i 课程介绍.mp4 -acodec copy -vcodec copy -f flv 课程介绍output.flv //mp4转flv
ffmpeg -i 课程介绍.flv -b:v 640k 课程介绍output.mp4 //flv转mp4
ffmpeg -i 课程介绍.mp4 课程介绍output.avi //mp4转avi
ffmpeg -i 课程介绍.flv -vcodec h264 -r 25 -b 200 -ab 128 -acodec mp3 -ac 2 -ar 44100 课程介绍output.mp4 //flv转mp4
ffmpeg -i 课程介绍.mp4 -c:v libx264 -ar 22050 -crf 28 课程介绍output.flv //mp4转flv
ffmpeg -i 课程介绍.avi -c copy -map 0 课程介绍output.mp4 //avi转mp4
ffmpeg -i 课程介绍.mkv -y -vcodec copy -acodec copy 课程介绍output.mp4 //mkv转mp4
ffmpeg -i 课程介绍.mkv -vcodec copy -acodec copy 课程介绍output.avi //mkv转avi
四、图像处理相关
ffmpeg –i 课程介绍.mp4 -y -f image2 -ss 8 -t 0.001 -s 350x240 课程介绍Image.jpg //截取指定时间的缩略图,-ss后跟的时间单位是秒
ffmpeg -i 课程介绍.mp4 -vf "movie=logo.png [logo]; [in][logo] overlay=10:10:1 [out]" 课程介绍output.mp4//添加图片水印
ffmpeg -i 课程介绍.mp4 -i logo.png -filter_complex overlay 课程介绍1.mp4//添加图片水印
ffmpeg –i 课程介绍.mp4 -acodec copy-vcodec copy -vf "movie=图片水印.png[watermark];[in][watermark]overlay=10:10:1[out]" 课程介绍output.mp4//添加图片水印
ffmpeg -y -i 课程介绍.mp4 -ignore_loop 0 -i 动画水印.gif -filter_complex overlay=0:H-h 课程介绍_out2.mp4//添加GIF
ffmpeg -i origin.flv -vf "drawtext=fontfile=simhei.ttf: text='课程介绍水印':x=100:y=10:fontsize=24:fontcolor=yellow:shadowy=2" 课程介绍output.mp4//添加文字水印
五、视频方向处理相关
ffmpeg -i 课程介绍.mp4 -metadata:s:v rotate="90" -codec copy 课程介绍output.mp4//旋转90°
ffmpeg -i 课程介绍.mp4 -vf "transpose=1" 课程介绍output.mp4//顺时针旋转90°
ffmpeg -i 课程介绍.mp4 -vf "transpose=2" 课程介绍output.mp4//逆时针旋转90°
ffmpeg -i 课程介绍.mp4 -vf "transpose=3" 课程介绍output.mp4//顺时针旋转90°后再水平翻转
ffmpeg -i 课程介绍.mp4 -vf "transpose=0" 课程介绍output.mp4//逆时针旋转90°后再水平翻转
ffmpeg -i 课程介绍.mp4 -vf hflip 课程介绍output.mp4//水平翻转视频画面
ffmpeg -i 课程介绍.mp4 -vf vflip 课程介绍output.mp4//垂直翻转视频画面
六、视频剪切相关
//提取图片
ffmpeg –i origin.avi –r 1 –f image2 image-%3d.jpeg
//-r 提取图像的频率,-ss 开始时间,-t 持续时间
ffmpeg -ss 0:1:30 -t 0:0:20 -i origin.avi -vcodec copy -acodec copy output.avi
//从10s处开始剪切,持续15秒(此方法有时候会遇到视频第一帧黑屏,就是未播放时候的封面是黑色的,原因是未定位到关键帧I帧)
ffmpeg -i 课程介绍.mp4 -ss 10 -t 15 -codec copy cut.mp4
//从10s处开始剪切,持续15秒(此方法为优化后的方法,此剪切视频的方法可以解决第一帧黑屏问题,但是可能切割的时间落点稍稍的有一丢丢的不准确,但是应该可以落在误差范围之内)
ffmpeg -ss 10 -t 15 -i 课程介绍.mp4 -codec copy cut.mp4
七、倒放音视频&加速视频&减速视频
ffmpeg -i origin.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast output.mp4 //视频倒放,无音频
ffmpeg -i origin.mp4 -vf reverse output.mp4//视频倒放,音频不变
ffmpeg -i origin.mp4 -map 0 -c:v copy -af "areverse" output.mp4//音频倒放,视频不变
ffmpeg -i origin.mp4 -vf reverse -af areverse -preset superfast output.mp4//音视频同时倒放
ffmpeg -i origin.mp4 -vf setpts=PTS/2 -af atempo=2 output.mp4//视频加速,帧速率变为2倍,调整倍速范围【0.25,4】
ffmpeg -i origin.mkv -an -filter:v "setpts=0.5*PTS" output.mkv//视频减速播放
八、视频拼接
这里全部以mp4文件为例子,介绍两种方法,如果不是mp4文件,可以尝试先转码为mp4后再拼接起来
1、将 mp4 先转码为 mpeg文件,mpeg是支持简单拼接的,然后再转回 mp4。
ffmpeg -i 1.mp4 -qscale 4 1.mpg
ffmpeg -i 2.mp4 -qscale 4 2.mpg
cat 1.mpg 2.mpg | ffmpeg -f mpeg -i - -qscale 6 -vcodec mpeg4 output.mp4
2、使用ts拼接
先将 mp4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 mp4。
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
九、视频的合并
下面通过动手实现抖音合拍功能来演示命令行的使用,首先准备好两个文件origin1和origin2,都是用手机拍摄的,高度相同;
1、两个视频的合并(注意参数hstack代表是横向合并,也就是左右合并,横向合并的形象类比为“川”;如果是竖向合并,也就是上下合并,用参数vstack,竖向或者纵向合并的形象类比为“三”)
ffmpeg -i origin1.mp4 -i origin2.mp4 -lavfi hstack output.mp4
注意:经过此命令处理后的视频output.mp4只会保留origin1的音频
2、提取视频中的音频并合并音频
ffmpeg -i origin1.mp4 -vn -y -acodec copy audio1.m4a
ffmpeg -i origin2.mp4 -vn -y -acodec copy audio2.m4a
ffmpeg -i audio1.m4a -i audio2.m4a -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 audio3.mp3
3、把audio3.mp3文件合并到output.mp4中去
ffmpeg -i output.mp4 -i audio3.mp3 -c:v copy -c:a aac -strict experimental success.mp4
最后我们得到的success.mp4就是合拍视频,包含了两个视频的音频。
三个视频合并(origin=3表示希望合并的视频的个数)
ffmpeg -i origin1.mp4 -i origin2.mp4 -i origin3.mp4 -lavfi hstack=origins=3 output.mp4
常用参数说明:
命令格式:
ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
ffmpeg [[options][`-i' origin_file]]... {[options] output_file}...
(1) h264: 表示输出的是h264的视频裸流
(2) mp4: 表示输出的是mp4的视频
(3)mpegts: 表示ts视频流
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器,一般后面加copy表示拷贝
音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器,一般后面加copy表示拷贝
-an 不处理音频