ffmpeg fbdev和pix_fmt cpu使用情况



我是视频处理的新手,最近开始从rtsp h265 15fps 800x448 2000kbps捕获相机内容,并将其投影到/dev/fb0设备。

我在ubuntu 22.04上使用ffmpeg 4.4.2与intel elkhartlake Gen11,使用HDMI 连接到显示器

当我运行以下cmd 时

ffmpeg -init_hw_device vaapi=intel:/dev/dri/renderD128 -hwaccel vaapi -loglevel verbose -rtsp_transport tcp -stimeout 30000000  -i rtsp://192.168.0.21/media.smp -pix_fmt bgra -f fbdev /dev/fb0

它消耗了13%的cpu和1.5%的GPU(来自sudo intel.GPU_top)

我知道大部分ffmpeg cpu的使用都是由"-"pix_fmt bgra";因为当我运行时

ffmpeg -init_hw_device vaapi=intel:/dev/dri/renderD128 -hwaccel vaapi -loglevel verbose -rtsp_transport tcp -stimeout 30000000  -i rtsp://192.168.0.21/2x2/media.smp  -f null -

CPU只有3%-5%,GPU 1.5%,我猜GPU是用来解码的

如果我删除";"pix_fmt bgra";从第一个命令,然后ffmpeg退出,并错误地说

[fbdev @ 0x55e70d6cc800] Pixel format nv12 is not supported, use bgra
av_interleaved_write_frame(): Invalid argument

我猜cpu正忙于从nv12转换为bgra

所以问题是,如何用更少的CPU将内容投影到fb0?并将这些活动转移到GPU?我用scale_vaapi还是什么?

我确实搜索了fbset来支持nv12,但不确定如何支持,所有这些都是基于这样的假设,即如果我能获得fb0支持nv12的话-"pix_fmt bgra";减少CPU使用

我还试着用";perf记录";看来CPU被swscale滤波器使用了

或者,假设我使用vpp_qsv过滤器,这是否意味着我无法将格式转换为bgra?因为这里有这个功能,因为它没有bgrahttps://github.com/FFmpeg/FFmpeg/blob/6d31619af2826adfe5aa71990cebafa8cbd6ecde/libavfilter/vf_vpp_qsv.c#L720

感谢

发现我可以简单地使用vpp_qsv过滤器。所以完整的命令有点像

ffmpeg -hwaccel qsv -c:v hevc_qsv -i http://url -vf "vpp_qsv=format=bgra,hwdownload,format=bgra" -f fbdev /dev/fb0

获取vpp_qsv的选项信息,因为在线没有太多文档

ffmpeg --help filter=vpp_qsv

对于任何有类似问题的人,我希望以上能有所帮助。欢呼

相关内容

  • 没有找到相关文章

最新更新