目录
- 参考
- 硬件加速简介
- FFmpeg 硬件加速各环境支持情况
- FFmpeg命令行工具使用硬件加速
1. 参考
- [1] trac.ffmpeg.org/HWAccelIntro
- [2] 夏威廉/FFmpeg 硬件加速方案概览 (上)
- [3] 夏威廉/FFmpeg 硬件加速方案概览 (下)
- [4] 赵军/FFmpeg 硬件加速方案概览 (上)
2. 硬件加速简介
使用专用硬件(通常集成到GPU)对视频处理进行加速,比如解码、编码或filter等操作[1]。
优点:
- 比软件处理速度快。
- 减少CPU的负荷,更省电。
- 避免数据拷贝。许多硬件解码器能够生成输出到硬件设备(比如显存)的surface,这意味渲染输出之前不需要额外的数据拷贝。在某些情况下,它还可以支持硬件设备的surface输入与编码器一起使用,以避免在转码时候的数据拷贝。
缺点:
- 硬件编码器生成的输出质量通常比好的软件编码器低得多[1]。
- 硬件加速方案依赖于各硬件和平台的支持,没有统一的方案。
- 对于特定处理(比如编解码)硬件加速的支持和更新迭代速度慢。
关于硬件加速的详细介绍参见[2][3]。
3. FFmpeg 硬件加速各环境支持情况
硬件加速API在各系统和硬解环境的支持情况如下[1]。
hw_platform_api_available.PNG
FFmpeg实现的API的情况如下[1]。
ffmpeg_hw_accel.PNG
4. FFmpeg命令行工具使用硬件加速
-
-hwaccel
选项启用硬件解码器。- 软件解码器会正常启动,如果它检测到一个硬件可解码的流,将尝试将所有重要的处理交给硬件。如果流在硬件中不可解码,那么将自动使用软件解码。
-
-hwaccel_device
选项指定特定的硬件设备(比如有多个显卡可用)。 -
-codec:v
选项设置特定的编解码器,适用于外部包装的编解码器。- 通常将它们命名为codec_api(例如:h264_cuvid),要求事先知道编解码器的名称。
- 如果不支持不会回退到软件编解码。
- 硬件filter可以像其他filter一样在filtergraph中使用。
- 存在硬件filter与软件filter支持的格式不同的情况,需要使用
hwupload
和hwdownload
filter在硬件surface和内存之间拷贝数据。
- 存在硬件filter与软件filter支持的格式不同的情况,需要使用
示例:
1. 使用NVENC进行h264编码:
ffmpeg -s 1280*720 -i input_yuv -c:v h264_nvenc -pixel_format yuv420p -preset default output.mp4
2. NVEDC进行h264解码
ffmpeg -hwaccel nvdec -i input.mp4 output_yuv
网友评论