首页 > 解决方案 > FFmpeg 流式传输低 CRF 导致质量低下

问题描述

我正在使用以下参数与 FFmpeg 进行流式传输(实时聊天)。

ffmpeg -f dshow -rtbufsize 100M -i video="device":audio="device" \
-c:v libx264 -crf 30 -preset ultrafast -tune zerolatency \
-c:a aac -f mpegts udp://127.0.0.1:1234

没想到,当 CRF 从 30 降到 20 时,一步步降下来。流质量急剧下降。当 CRF 大约为 20 时,画面的突然变化(如头部运动),似乎使图像变为绿色、灰色或非常失真。我尝试使用 CRF 30,问题似乎消失了。为什么会这样?

鉴于我在本地主机上,我认为这不是带宽问题。此外,我没有根据 I 帧进行任何更改。

编辑:我检查了在 libx265 上给定 CRF 20 和 CRF 30 的文件大小。

10秒视频。

CRF 20: 1.7M

CRF 30: 350kb

对于 localhost 或任何其他直播服务无法处理的 10 秒流,1.7M 真的很糟糕吗?

标签: ffmpegvideo-streamingh.264live-streamingvideo-encoding

解决方案


我不知道分辨率是什么,但这似乎是编码的性能问题。CRF=20 也可用于最高 20 Mbps 作为 720p 的标准。作为建议,不要使用 CRF,而是根据分辨率指定适当的比特率。720p -> 2.5Mbps 1080p -> 4Mbps

而且'dshow'也不是很快捕获。你必须考虑到它。我推荐 DX10 的交换链。这是超级快速的捕获器。


推荐阅读