You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FFmpeg采集桌面并通过RTP组播传输时帧率无法达到59.94fps的问题求助

FFmpeg采集桌面并通过RTP组播传输时帧率无法达到59.94fps的问题求助

各位大佬好,我现在碰到个头疼的问题:我想采集PC当前的显示画面(比如正在运行的游戏),然后通过RTP组播以rawvideo格式、yuv422p10的10位色深、59.94fps的帧率传输出去。

目前我用的命令行是这样的:

ffmpeg -f gdigrab -framerate 60000/1001 -i desktop ^
-c:v rawvideo -pix_fmt yuv422p10 -b:v 5M ^
-f rtp -r 60000/1001 -sdp_file stream.sdp rtp://224.1.1.1:5004

但不管怎么调参数,实际输出的帧率只能卡在37~39fps,死活上不去59.94。想问问大家,这是FFmpeg本身处理不了这么高的负载,还是我的命令参数哪里设置错了?


针对你的问题,我结合经验梳理了几个可能的原因和解决方向:

1. 先排查硬件和系统资源瓶颈

  • 采集环节的性能限制:gdigrab采集桌面本身就吃CPU/GPU性能,尤其是游戏画面是高动态、高分辨率的场景,再加上yuv422p10是10位色深,数据量比普通8位格式大了不少。你可以先单独测试本地采集,去掉RTP传输部分,看看能不能跑满帧率:
    ffmpeg -f gdigrab -framerate 60000/1001 -i desktop -c:v rawvideo -pix_fmt yuv422p10 test.raw
    
    如果本地录制都达不到59.94fps,那基本就是你的硬件(CPU/GPU)扛不住这么大的采集+格式转换负载了——哪怕是rawvideo,从桌面的RGB格式转成yuv422p10也需要算力。
  • 系统资源冲突:打开任务管理器看看FFmpeg的CPU、内存占用,如果已经接近100%,那肯定是资源不够用了。另外游戏本身也会占大量资源,两者叠加下来帧率自然上不去。

2. 修正FFmpeg命令里的参数问题

  • 重复设置帧率没必要:你的命令里既给输入的gdigrab设了-framerate 60000/1001,又给输出的RTP设了-r 60000/1001,其实输入端的帧率设置已经足够,输出端的-r反而可能导致FFmpeg做额外的帧率转换处理,建议去掉输出的-r参数,让它直接沿用输入的帧率。
  • 码率设置严重不合理:你设的-b:v 5M对于yuv422p10的59.94fps画面来说实在太低了。举个例子,1080P分辨率下,yuv422p10的原始码率大概是1920*1080*10*2*59.94/8/1024/1024 ≈ 300Mbps,你设的5M连零头都不到,FFmpeg只能通过丢帧来压缩码率,这直接导致帧率掉下来。rawvideo不需要码率控制,建议直接去掉-b:v参数,让它用原始数据量传输。

3. 其他优化小技巧

  • 降低采集分辨率:如果硬件性能确实跟不上,可以试试用-video_size 1280x720降低采集分辨率,减少数据量,看看帧率能不能上去。
  • 换用硬件加速的采集方式:gdigrab是Windows上的基础采集工具,你可以试试dshow采集,或者如果有NVIDIA显卡的话,用NVENC相关的采集方案,硬件加速能大幅减轻CPU的负担。
  • 排除网络影响:组播传输如果网络带宽不够或者有丢包,FFmpeg也可能会降帧适配。你可以先测试本地回环传输(比如把RTP地址设成127.0.0.1),看看帧率是否正常,先排除网络的问题。

备注:内容来源于stack exchange,提问作者NoobCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:14:34