0. 系统环境基于 Windows 下演示,Linux 下也可以适用。所使用 ffmpeg 版本为 BtbN 编译的 win64-gpl 版(非 gpl-share),项目地址:BtbN / FFmpeg-Builds也可以使用 gyan.dev 编译的 git-full 版,地址:gyan.dev ,都是官方推荐的。
所使用的测试片段是一段相机录制的 h264 编码的100兆码率的 4k 25帧的视频,信息如图
1. 首先在默认情况下,不加任何参数,会直接使用 CPU 编解码
ffmpeg -i input.mp4 output.mp4可以看到转码速度是相对比较慢的,并且过程中 CPU 是处于 100% 使用率的。
2. 尝试使用硬件加速编解码首先通过命令 ffmpeg -hwaccels 查看所支持的硬件加速方法,如果你是在 Windows 平台并且使用的是我所提到的那两个版本,那么结果应该和下图相同,Linux 下的版本可能会略有不同。通过加上参数 -hwaccel 可以指定硬件加速方法。如果你的是 N 卡,可以选择 cuda ,如果是 Intel 核显,可以选择 qsv ,(印象里还有一个 A 卡的 amf )。
首先我们试一下自动ffmpeg -hwaccel auto -i input.mp4 output.mp4可以看到在自动的设置下选择了 dxva2 为硬件加速方法
但是从提升上看并不明显,调用了显卡很小一部分解码器,CPU 依然满载
接着试一下 CUDAffmpeg -hwaccel cuda -i input.mp4 output.mp4可以看到速度与 auto 设置下类似,实际情况也是只调用了显卡的部分解码能力,CPU 依然满载
3. 手动指定视频的编解码器
查看支持的编解码器通过 ffmpeg -codecs | findstr "h264" 查看所支持的 h264 编解码器(Linux 下可以用 grep )
从图中可以看到 decoders(解码器,对应 input 文件的编码)和 encoders (编码器,对应 output 文件的编码)。decoders 中 h264_qsv 是 Intel 核显/显卡专用的硬件加速解码器,h264_cuvid 是 N 卡专用的解码器。encoders 中 h264_amf 和 h264_mf 都是 A 卡专用的编码器,h264_qsv 对应 I 卡,h264_nvenc 对应 N 卡。(当然,如果你知道编解码是做什么的话,你完全可以把 h264 编码的文件转为 h265 或者其他编码,这里只是作为使用硬件加速的演示。)
测试(由于我的笔记本的核显出厂被屏蔽了,因此只能使用 N 卡硬件加速测试,如果你的核显能用,可以试试,说不定不比独显编解码慢)
使用 -c:v 参数来指定视频的编解码器,这里 c 是 codec 的缩写,v 是指 video ,处理音频编码可以替换为 a ( audio )(本人对音频编码并没有研究,也不在