如何在CentOS 8 / RHEL 8 Linux系统上安装FFmpeg?FFmpeg是一个免费的开源多媒体框架,用于播放,编码,解码,流式传输,转码,多路复用,多路复用和过滤各种格式的多媒体文件,包括MPEG1音频和视频,MPEG4,h263,ac3,asf,avi,real, mjpeg和Flash。
FFmpeg是一个跨平台应用程序,可以在各种构建环境,配置和机器架构下的Linux,,Windows,BSD,Solaris等上运行。大多数可用于Linux的媒体播放器以及音频/视频下载器和转换器(例如youtube-dl)都需要FFmpeg才能工作。
FFmpeg工具
这些是FFmpeg的主要构建基块:
ffmpeg –用于在格式之间转换多媒体文件的命令行工具
ffplay –基于SDL和FFmpeg库的简单媒体播放器
ffprobe –简单的多媒体流分析仪
FFmpeg还包含开发人员库– libavutil,libavcodec,libavformat,libavdevice,libavfilter,libswscale和libswresample。
下图描述了每个输出的转码过程 :

如何在CentOS 8 / RHEL 8上安装FFmpeg
在CentOS 8 / RHEL 8 Linux上安装FFmpeg之前,确保系统环境已经配置完全。
安装RPMfusion Yum存储库
创建RPM Fusion数据源是为了提供Fedora和基于Red Hat的发行版未提供的软件。该数据源中可用的软件应用程序均以预编译的RPM文件的形式提供。下面将使用RPMfusion数据源在CentOS 8 / RHEL 8上安装FFmpeg。
在安装RPM Fusion数据源之前,需要在系统上安装EPEL数据源。

1
2
3
sudo dnf -y install https://download.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
sudo dnf install --nogpgcheck https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm

在CentOS 8 / RHEL 8 Linux上安装FFmpeg
添加EPEL和RPM Fusion存储库后,在终端中运行以下命令以在CentOS 8 / RHEL 8 Linux系统上安装FFmpeg。

1
2
3
sudo dnf install http://rpmfind.net/linux/epel/7/x86_64/Packages/s/SDL2-2.0.10-1.el7.x86_64.rpm
sudo dnf install ffmpeg
sudo dnf -y install ffmpeg-devel

使用以下命令检查RHEL / CentOS系统上安装的FFmpeg版本。

1
2
rpm -qi ffmpeg
ffmpeg -version


命令
1:录制视频:

1
2
3
4
5
6
7
8
9
10
11
<h1>-f:指定从使用mac的avfoundation采集数据。</h1>

<h1>-i:就是input,输入流,后面的1是设备编号,表示屏幕(录屏)</h1>

i处理输入流)。

<h1>-r:指定帧率,一般来说25帧就比较流畅,15帧就勉强够用了。</h1>

<h1>out.yuv:采集后的数据保存成yuv格式,这是一种原始格式的数据,比较大。</h1>

ffmpeg -f avfoundation -i 1 -r 30 out.yuv

播放视频:

1
2
3
4
5
<h1>-s 指定分辨率</h1>

<h1>-pix_fmt 指定原始视频格式</h1>

ffplay -s 2560*1600 -pix_fmt uyvy422

采集音频

1
2
3
<h1>冒号之前代表视频设备,冒号之后就代表音频设备</h1>

ffmpeg -f avfoundation -i :1 out.wav

播放音频

1
2
3
<h1>这里由于是有格式的音频数据,直接播放就可以了。</h1>

ffplay out.wav

2:分解与复用
用于更换多媒体数据的格式(封装格式)
解复用 - 本质是音视频数据的分离。
复用 - 将音视频数据重新封装。
转换音视频格式

1
2
3
4
5
6
7
<h1>-vcodec 视频解复用</h1>

<h1>-acodec 音频解复用</h1>

<h1>copy 表示不更改变解复用后的编码格式,完全copy</h1>

ffmpeg -i test.mp4 -vcodec copy -acodec copy out.flv

提取视频流

1
2
3
<h1>-an 表示不要音频流</h1>

ffmpeg -i test.mp4 -an -vcodec copy out.h264

提取音频流

1
ffmpeg -i test.mp4 -acodec copy -vn out.h264

3:处理原始数据
提取视频原数据

1
2
3
4
5
<h1>-c:v 对视频进行解码,使用的编解码器是 rawvideo</h1>

<h1>-pix_fmt 每一帧图像编码为 yuv 4:2:0</h1>

ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

播放视频原数据
提取音频原数据

1
2
3
4
5
6
7
<h1>-ar 即 audio read,音频采样率为44100</h1>

<h1>-ac 即 audio channel,声道,ac2表示双声道</h1>

<h1>-f 抽取出的音频pcm数据的格式,s16le s表示有符号,16位,le-little end 表示小头。</h1>

ffmpeg -i out.mp4 -vn -ar 44100 ac 2 -f s16le out.pcm

播放音频原数据

1
ffplay -ar 44100 -ac 2 -f s16le out.pcm

4:滤镜命令

1
2
3
4
5
6
7
8
9
<h1>-vf 指定滤镜</h1>

<h1>crop,一个滤镜的名字,=后面是参数,in_w 表示宽度减少200,in_h表示高度减少200</h1>

<h1>-c:v 指定使用的编解码器,前面有说过</h1>

<h1>-c:a copy 不对音频做处理</h1>

ffmpeg -i test.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4

5: 裁剪与合并命令
裁剪:

1
2
3
4
5
<h1>-ss 裁剪的时间点</h1>

<h1>-t 裁剪的时长,以秒为单位</h1>

ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts

合并:

1
2
3
4
5
6
7
<h1>-f concat 表示要对后面的文件进行拼接</h1>

<h1>-i 指定输入文件,inputs.txt 中是一个文件列表,指定了要拼接的视频</h1>

<h1>out.flv 输出</h1>

ffmpeg -f concat -i inputs.txt out.flv

其中,inputs.txt中文件的格式为

1
2
file '1.mp4'
file '2.mp4'

加上copy,会使用当前的编码方式,不会执行解码的流程,速度更快:

1
ffmpeg -f concat -i files.txt -c copy output.mp4

6:图片与视频互转命令
视频转图片

1
2
3
4
5
6
7
<h1>-r 1 表示一秒钟转一张图片</h1>

<h1>-f 指定转出文件格式,这里为image2</h1>

<h1>image-%3d.jpeg 表示图片名,%3d表示图片编号由3个数字组成。</h1>

ffmpeg -i in.flv -r 1 -f image2 image-%3.jpeg

图片转视频

1
ffmpeg -i image-%3d.jpeg out.mp4

7:直播推/拉流
直播推流

1
2
3
4
#-c 音视频编解码,-a是音频编解码 -v是视频编解码
#-f 指定格式<br />
#-re 表示帧率和真正的帧率保持同步
ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName

直播拉流

1
ffmpeg -i rtmp://server/live.streamName -c copy dump.flv

更多操作方法可以查看帮助。或者浏览FFmpeg官方文档

1
ffmpeg --help

好了到这里FFmpeg就安装成功了!

订阅
提醒
guest
0 评论
内联反馈
查看所有评论