FFMPEG 恒定比特率转码

FFMPEG 恒定比特率转码

我一直在研究 FFMPEG,并试图实现尽可能恒定的流式比特率。我已经阅读了 FFMPEG 文档和示例,但当我使用 wireshark 测量最终比特率时,我仍然没有得到恒定的比特率,并且我看到了超过 -maxrate 参数的周期性比特率峰值。

目前,我从 IP 摄像头获取 RTSP 流,然后使用以下命令(或其变体)将其转码为本地 UDP 流:

ffmpeg -rtsp_transport tcp -i "RTSP_IP" -an -c:v libx264 -x264-params "hal-hrd=cbr:force-cfr1" -b:v 100k -minrate 100k -maxrate 100k -bufsize 150k -threads 1 -flush_packets 0 -f mpegts "udp://@10.100.3.30:5004?packet_size=1316&bitrate=100000"

在上面的例子中,我努力将最大比特率设为 100Kbps,但我仍然看到比特率峰值,其幅度受 -bufsize 参数的影响。但是,将 bufsize 设得太小会导致图像质量重新调整过于频繁。生成的 wireshark 图为:

输出

三个问题:

  1. 我在这里做错了什么吗? - 无论我做什么,我总是看到峰值超过 -maxrate
  2. 我的理解是 FFMPEG 对比特率执行软上限。这是正确的吗?
  3. 如何才能实现比特率的硬上限?

感谢您就此事提供的任何帮助。我已经为这个问题绞尽脑汁一段时间了,所以我会非常感激!

相关内容