欢迎光临
我们一直在努力

CentOS安装和使用FFmpeg

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>
未经允许不得转载:798VPS » CentOS安装和使用FFmpeg

相关推荐

  • 暂无文章