ffmpeg 转码使用
下载地址:https://www.ffmpeg.org/download.html
简要
音视频文件本身其实是一个容器(container),如视频常用的容器 AVI、MP4,音频常用容器 MP3、mpeg,
而将音视频转为指定容器即为转码,此时需要进行编码,常用的编码格式 H.264、H.265、MPEG-4、AAC 等
ffmpeg -formats 可查看 ffmpeg 支持的容器种类;ffmpeg -codecs 可查看 ffmpeg 支持的编码
转码命令
一般情况下,使用 ffmpeg 转码参数分为几个部分:
ffmpeg [全局参数(可省略)] [输入文件参数(可省略)] -i [输入文件地址] [输出文件参数(可省略)] [输出文件地址]
如:ffmpeg -i input.avi -b 1500k -c:v libx264 -preset veryslow output.mp4
指定了转码后文件比特率为 1500k,使用的编码格式为 H.264 ,转码速度调至最慢(时间最长,体积最小),转码后容器为 MP4
ffmpeg 常用的命令行参数如下:
-
-c:指定编码器,通过
ffmpeg -encoders
命令可以获取 ffmpeg 默认支持的编码器,常用编码器如下:- libx264:最流行的开源 H.264 编码器
- NVENC:基于 NVIDIA GPU 的 H.264 编码器(使用 GPU 硬件加速时)
- libx265:开源的 HEVC 编码器
- libvpx:谷歌的 VP8 和 VP9 编码器
- libaom:AV1 编码器
-c:v:指定视频编码器,如 libx264 等,,同时也支持加拓展(源码编译时在 libavcodec/allcodecs.c 注册编码器)
-c:a:指定音频编码器,如 libfdk_aac
-i:指定输入文件,若只添加该参数,则可以查看音频信息,如
ffmpeg -i i.mp4
-an:去除音频流
-vn: 去除视频流
-vf:转化视频分辨率,如
ffmpeg -i i.mp4 -vf scale=1280:-1 o.mp4
将视频转为 1280 * 720 分辨率(720p),也可以使用-s 1280*720
指定-preset:指定输出的视频质量,会影响文件的生成速度和体积,有以下几个可用的值
ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow,在进行压缩转码其不考虑时间成本时可以使用 veryslow-y:不经过确认,输出时直接覆盖同名文件。
-b:v :指定视频的码率,
ffmpeg -i i.mp4 -b:v 1.5M o.mp4
码率设置为小于等于 1.5Mb/s,在进行视频压缩时,一般可调整该值,PS:我们手机拍的视频体积很大,往往是该值偏高造成-b:a : 指定音频的码率
ffmpeg -i i.mp3 -c:a aac -b:a 192k o.m4a
-r: 指定视频帧数
ffmpeg -i i.mp4 -r 20 o.mp4
,将视频帧数改为 25 帧-ar 设定声音采样率,
ffmpeg -i i.mp3 -ar 24000 o.mp3
,该值一般为 24000、48000
转码效率
使用 COU 进行转码时,往往一个核心只能同时转码一个文件,比如一个 6 核 CPU,只能同时转码 6 个文件,且占用率极高,在设计并发转码时需要考虑机器性能的问题。如果机器加装了 GPU,可以通过 GPU 加速转码,转码有着大量的浮点运算,所以使用 GPU 转码时,同一个文件大概能加快 40% 的速度
使用 GPU 转码
由于本人显卡位 N 卡,故只能说下 N 卡 GPU 转码的一些操作方法
下载 N 卡 CUDA 环境开发包并安装。下载地址:https://developer.nvidia.com/cuda-downloads
使用命令
ffmpeg -hwaccels
查看支持的硬件加速选项,使用ffmpeg -codecs | grep cuvid
查看 cuvid 提供的GPU编解码器
Hardware acceleration methods:
cuda
dxva2
qsv
d3d11va
qsv
cuvid
- 编写转码命令,使用
-hwaccel
指定加速的硬件(cuvid),此时解码器和编码器都需要由使用相关硬件提供
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i i.mp4 -c:v h264_nvenc -y o.mp4
- 突破 N 卡 GPU 转码并发限制,使用 N 卡进行转码时,当并发数量大于 2 时,将出现
OpenEncodeSessionEx failed: out of memory
的错误,此时可通过打补丁的方式突破限制,补丁地址及打补丁方法:https://github.com/keylase/nvidia-patch
其他
ffmepg 除了可以进行音视频的转码外,还可以进行音视频剪辑编辑,如音轨添加、图片水印添加,视频长度剪辑。同时,还可以进行桌面录制,视频推流等,市面上很多视频编辑、桌面录制软件核心都是 ffmpeg,这些如果大家感兴趣的话,可以在之后继续和大家分享