FFmpeg是一套免费的开源计算机程序,它提供了录制、转换以及流化音视频的完整解决方案。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。
安装
在CentOS 7安装(可以安装在ContOS 8)
1.添加RPMfusion仓库
为在CentOS 7上安装FFmpeg,需要先添加RPMfusion仓库:
$ sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
2.安装FFmpeg
添加了RPMfusion仓库后,运行下列两条命令以安装FFmpeg:
$ sudo yum install http://rpmfind.net/linux/epel/7/x86_64/Packages/s/SDL2-2.0.10-1.el7.x86_64.rpm
$ sudo yum install ffmpeg ffmpeg-devel
3.检查FFmpeg在CentOS 7上的安装
$ rpm -qi ffmpeg
$ ffmpeg -version
在CentOS 8安装看这里
命令简介
视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容。
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
常用的命令行参数
-c
:指定编码器-c copy
:直接复制,不经过重新编码(这样比较快)-c:v
:指定视频编码器-c:a
:指定音频编码器-i
:指定输入文件-an
:去除音频流-vn
: 去除视频流-preset
:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。-y
:不经过确认,输出时直接覆盖同名文件。
使用场景
视频处理
视频数据与图像数据十分相似,在非音频部分可以看作是多张(帧)图像数据的拼接。按照视频处理的抽帧场景,可以分为以下几个情况:
均匀抽帧
<span class="c1"># -r: 抽帧速率,即从视频中每秒钟抽取图片的数量。1代表每秒抽取一帧。</span>
<span class="c1"># -q:v 2 表示输出的图片质量,一般是1到5之间(1 为质量最高)</span>
ffmpeg -i test.mov -r <span class="m">1</span> -f image2 foo-%03d.jpeg
ffmpeg -i test.mov -r <span class="m">1</span> -q:v <span class="m">2</span> -f image2 foo-%03d.jpeg
<span class="c1"># 每一秒输出一帧图像为图片, 图片命名为 out1.png, out2.png, out3.png,依次顺序输出.</span>
ffmpeg -i input.flv -vf <span class="nv">fps</span><span class="o">=</span><span class="m">1</span> out%d.png
<span class="c1"># 每一分钟截一次图,例子中的 %03d 为用来规定每个输出图片的序数将格式化使用3位数.</span>
ffmpeg -i myvideo.avi -vf <span class="nv">fps</span><span class="o">=</span>1/60 img%03d.jpg
<span class="c1"># 实践中前面放方法最常见</span>
抽取指定时间的帧
<span class="c1"># 耗时0.05s</span>
ffmpeg -ss 00:00:30 -i test.mp4 -vframes <span class="m">1</span> target.jpg
<span class="c1"># 耗时0.56s</span>
ffmpeg -i test.mp4 -ss 00:00:30 -vframes <span class="m">1</span> target.jpg
抽取视频关键帧(IPB帧)
在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧。
- I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利用本帧的信息进行编码。
- P帧即Predictive-coded Picture(预测编码图像帧),利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码。
- B帧即Bidirectionally predicted picture(双向预测编码图像帧),提供最高的压缩比,它既需要之前的图像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码。
# 抽取I帧
ffmpeg -i test.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr -qscale:v 2 -f image2 ./foo-%03d.jpeg
# 抽取P帧
ffmpeg -i test.mp4 -vf "select=eq(pict_type\,P)" -vsync vfr -qscale:v 2 -f image2 ./foo-%03d.jpeg
# 抽取B帧
ffmpeg -i test.mp4 -vf "select=eq(pict_type\,B)" -vsync vfr -qscale:v 2 -f image2 ./foo-%03d.jpeg
抽取视频场景转换帧
<span class="c1"># 其中0.6表示帧为新场景的概率</span>
ffmpeg -i test.mp4 -filter:v <span class="s2">"select='gt(scene,0.6)',showinfo"</span> -f null - 2><span class="p">&</span><span class="m">1</span>
最新评论
十塊年費是直接從這張卡裡的外幣按匯率扣?
有人申请成功了吗?我的已经两天了,没有消息,没有收到成功邮件。信用卡扣了款!