背景:服务器上已安装CUDA 10.0,配备2080Ti显卡,驱动是410.78。想要看能不能用GPU加速截帧,所以尝试编译ffmpeg的gpu版本,参考教程如下面的references中的一到五。第一次安装遇到了驱动版本低导致nv-codec-headers有问题。后更换nv-codec-headers重新编译,成功,成果如下:
对视频进行转码,可以看到确实使用了GPU,命令:ffmpeg -i 6.mp4 -c:v h264_nvenc -c:a aac output.mp4
但是对视频截帧,只用到了CPU没有用到GPU,命令:ffmpeg -i /root/test_ffmpeg/6.mp4 -r 1 -q:v 2 -f image2 /root/test_ffmpeg/imgs/pic-%03d.jpeg。依然会跑满CPU,但是内存增加的不多(原本内存就永了23G)
新建终端之后,找不到ffmpeg,需将命令改成:/root/ffmpeg_sources/ffmpeg-3.3.8/ffmpeg -i /root/test_ffmpeg/6.mp4 -r 1 -q:v 2 -f image2 /root/test_ffmpeg/imgs/pic-%03d.jpeg。之后新增环境变量:PATH="$HOME/bin:$PATH",之前的命令可恢复使用。
中间的参数 400k是目标码率
2020/10/21
郁闷了,忘记装在那台服务器上了。。。。。
241服务器上
使用CPU进行视频转码,使用libx264编码器,限制码率:
ffmpeg -i 1.mp4 -vcodec h264 -pix_fmt yuv420p -vb 200k -acodec copy oo.mp4
可以看到CPU的速度在250fps,GPU的速度在650fps。
如果一段一分钟的视频,帧率为30,那么CPU转码需要30*600/250=72s,GPU转码需要30*600/650=28s
另外,看到一个视频转码的很好的视频,https://www.bilibili.com/video/av40429258/
references: