写点什么

CentOS 安装和使用 FFmpeg

用户头像
王坤祥
关注
发布于: 2021 年 01 月 17 日
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:不经过确认,输出时直接覆盖同名文件。


使用场景

视频处理

视频数据与图像数据十分相似,在非音频部分可以看作是多张(帧)图像数据的拼接。按照视频处理的抽帧场景,可以分为以下几个情况:

均匀抽帧
# -r: 抽帧速率,即从视频中每秒钟抽取图片的数量。1代表每秒抽取一帧。# -q:v 2  表示输出的图片质量,一般是1到5之间(1 为质量最高)ffmpeg -i test.mov -r 1 -f image2 foo-%03d.jpegffmpeg -i test.mov -r 1 -q:v 2 -f image2 foo-%03d.jpeg
# 每一秒输出一帧图像为图片, 图片命名为 out1.png, out2.png, out3.png,依次顺序输出.ffmpeg -i input.flv -vf fps=1 out%d.png# 每一分钟截一次图,例子中的 %03d 为用来规定每个输出图片的序数将格式化使用3位数.ffmpeg -i myvideo.avi -vf fps=1/60 img%03d.jpg
# 实践中前面放方法最常见
复制代码
抽取指定时间的帧
# 耗时0.05sffmpeg -ss 00:00:30 -i test.mp4 -vframes 1 target.jpg
# 耗时0.56sffmpeg -i test.mp4 -ss 00:00:30 -vframes 1 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
复制代码
抽取视频场景转换帧
# 其中0.6表示帧为新场景的概率ffmpeg -i test.mp4 -filter:v "select='gt(scene,0.6)',showinfo" -f null - 2>&1
复制代码


发布于: 2021 年 01 月 17 日阅读数: 39
用户头像

王坤祥

关注

日拱一卒,功不唐捐。 2017.10.17 加入

不懂热能的低温工程师不是好程序猿

评论

发布
暂无评论
CentOS安装和使用FFmpeg