[视频编码] ffmpeg在macOS上使用GPU编码
2020年12月08日更新:macOS Big Sur下面的hevc_videotoolbox和h264_videotoolbox好像出现了亿点点小问题,现在它们也不会调用GPU进行工作了。而更诡异的是在其他参数完全一样的情况下,h264_videotoolbox压出来的视频大小是hevc_videotoolbox的三分之一左右,而且速度也可以接受。因此基于目前的情况建议使用h264_videotoolbox进行工作(这个参数可以比无参数默认使用libx264的编码速度快5-6倍,而且CPU占用远低于libx264)。
只想抄参数:-vcodec h264_videotoolbox
或使用H265编码:-vcodec hevc_videotoolbox
ffmpeg目前是一个非常流行的视频编解码器(去官网的hall of shame上看一看甚至能看到不少熟悉的国产播放器的身影)。但是默认配置的ffmpeg最大的问题就是只能使用CPU进行编解码操作,白白浪费GPU的算力。

之前我搜索过macOS有没有办法调用GPU,当时找到的是使用-hwaccel参数。实测效果并不理想,只调用了2%-5%的GPU,效果几乎跟没有一样。
由于前段时间主板灰飞烟灭换了块主板,因此重新找了找网上的帖子,这次找到了更高效的参数:-vcodec h264_videotoolbox。
这里的h264_videotoolbox设置的是输出H.264编码的视频,如果需要输出H.265编码,可以改成hevc_videotoolbox。
Videotoolbox是苹果提供的一个框架,可以提供直接接触硬件编解码器的途径(https://developer.apple.com/documentation/videotoolbox)。从2015年开始ffmpeg开始整合进对Videotoolbox框架的支持。但是那时候穷买不起mac

在实际测试过程中,对于硬编码字幕的操作,使用纯CPU编码的平均速度在1.5倍左右,而使用CPU和GPU混合编码可以把平均速度提高到7.5倍左右。差不多是五倍的提升,你好,我好,风扇好。
但即使是这样也没办法做到完全榨干GPU的性能(Iris Plus 645只能占用到30%左右),等以后找到更好的方式了我再发一篇出来。