【发布时间】:2019-12-16 22:47:06
【问题描述】:
我正在使用以下参数与 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 真的很糟糕吗?
【问题讨论】:
-
我认为这不是带宽问题,因为我在本地主机上。 --> 通过保存到文件并检查来确认。
-
@Gyan 请检查编辑。
-
您报告了文件大小,但您最初的问题是质量问题。 20对30的质量如何?
-
@Gyan 当然 20 更好,但是我不需要实时聊天程序中的质量。我仍然会使用最好的。这就是我深入研究它的原因。
-
@Gyan 请注意,当保存到文件时,两种质量都是可以接受的,在实时解码时,20 crf 给出绿色、模糊、灰色的图像。 (在突然的运动中,正如我所经历的)
标签: ffmpeg video-streaming h.264 live-streaming video-encoding