精品软件与实用教程
如何在CentOS 8 / RHEL 8 Linux系统上安装FFmpeg?FFmpeg是一个免费的开源多媒体框架,用于播放,编码,解码,流式传输,转码,多路复用,多路复用和过滤各种格式的多媒体文件,包括MPEG1音频和视频,MPEG4,h263,ac3,asf,avi,real, mjpeg和Flash。
FFmpeg是一个跨平台应用程序,可以在各种构建环境,配置和机器架构下的Linux,macOS,Windows,BSD,Solaris等上运行。大多数可用于Linux的媒体播放器以及音频/视频下载器和转换器(例如youtube-dl)都需要FFmpeg才能工作。
FFmpeg工具
这些是FFmpeg的主要构建基块:
ffmpeg –用于在格式之间转换多媒体文件的命令行工具
ffplay –基于SDL和FFmpeg库的简单媒体播放器
ffprobe –简单的多媒体流分析仪
FFmpeg还包含开发人员库– libavutil,libavcodec,libavformat,libavdevice,libavfilter,libswscale和libswresample。
ffmpeg 下图描述了每个输出的转码过程 :
如何在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数据源。
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。
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版本。
rpm -qi ffmpeg ffmpeg -version
命令
1:录制视频:
-f:指定从使用mac的avfoundation采集数据。
-i:就是input,输入流,后面的1是设备编号,表示屏幕(录屏)
i处理输入流)。-r:指定帧率,一般来说25帧就比较流畅,15帧就勉强够用了。
out.yuv:采集后的数据保存成yuv格式,这是一种原始格式的数据,比较大。
ffmpeg -f avfoundation -i 1 -r 30 out.yuv
播放视频:
-s 指定分辨率
-pix_fmt 指定原始视频格式
ffplay -s 2560*1600 -pix_fmt uyvy422
采集音频
冒号之前代表视频设备,冒号之后就代表音频设备
ffmpeg -f avfoundation -i :1 out.wav
播放音频
这里由于是有格式的音频数据,直接播放就可以了。
ffplay out.wav
2:分解与复用
用于更换多媒体数据的格式(封装格式)
解复用 - 本质是音视频数据的分离。
复用 - 将音视频数据重新封装。
转换音视频格式
-vcodec 视频解复用
-acodec 音频解复用
copy 表示不更改变解复用后的编码格式,完全copy
ffmpeg -i test.mp4 -vcodec copy -acodec copy out.flv
提取视频流
-an 表示不要音频流
ffmpeg -i test.mp4 -an -vcodec copy out.h264
提取音频流
ffmpeg -i test.mp4 -acodec copy -vn out.h264
3:处理原始数据
提取视频原数据
-c:v 对视频进行解码,使用的编解码器是 rawvideo
-pix_fmt 每一帧图像编码为 yuv 4:2:0
ffmpeg -i input.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv
播放视频原数据
提取音频原数据
-ar 即 audio read,音频采样率为44100
-ac 即 audio channel,声道,ac2表示双声道
-f 抽取出的音频pcm数据的格式,s16le s表示有符号,16位,le-little end 表示小头。
ffmpeg -i out.mp4 -vn -ar 44100 ac 2 -f s16le out.pcm
播放音频原数据
ffplay -ar 44100 -ac 2 -f s16le out.pcm
4:滤镜命令
-vf 指定滤镜
crop,一个滤镜的名字,=后面是参数,in_w 表示宽度减少200,in_h表示高度减少200
-c:v 指定使用的编解码器,前面有说过
-c:a copy 不对音频做处理
ffmpeg -i test.mov -vf crop=in_w-200:in_h-200 -c:v libx264 -c:a copy out.mp4
5:ffmpeg 裁剪与合并命令
裁剪:
-ss 裁剪的时间点
-t 裁剪的时长,以秒为单位
ffmpeg -i in.mp4 -ss 00:00:00 -t 10 out.ts
合并:
-f concat 表示要对后面的文件进行拼接
-i 指定输入文件,inputs.txt 中是一个文件列表,指定了要拼接的视频
out.flv 输出
ffmpeg -f concat -i inputs.txt out.flv
其中,inputs.txt中文件的格式为
file '1.mp4' file '2.mp4'
加上copy,会使用当前的编码方式,不会执行解码的流程,速度更快:
ffmpeg -f concat -i files.txt -c copy output.mp4
6:图片与视频互转命令
视频转图片
-r 1 表示一秒钟转一张图片
-f 指定转出文件格式,这里为image2
image-%3d.jpeg 表示图片名,%3d表示图片编号由3个数字组成。
ffmpeg -i in.flv -r 1 -f image2 image-%3.jpeg
图片转视频
ffmpeg -i image-%3d.jpeg out.mp4
7:直播推/拉流
直播推流
#-c 音视频编解码,-a是音频编解码 -v是视频编解码 #-f 指定格式
#-re 表示帧率和真正的帧率保持同步 ffmpeg -re -i out.mp4 -c copy -f flv rtmp://server/live/streamName
直播拉流
ffmpeg -i rtmp://server/live.streamName -c copy dump.flv
更多操作方法可以查看帮助。或者浏览FFmpeg官方文档
ffmpeg --help
好了到这里FFmpeg就安装成功了!