我一直在研究 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 -minrate 1 -flth -maxrate 100k -bufsize 150k -thushareads 150k -bufsize 150k -bud 0 -f mpegts“udp://@10.100.3.30:5004?packet_size=1316&bitrate=100000”
在上面的範例中,我努力爭取 100Kbps 的最大比特率,但我仍然看到比特率峰值,其幅度受到 -bufsize 參數的影響。然而,使緩衝區大小太小會導致影像品質重新調整過於頻繁。生成的wireshark圖是:
三個問題:
- 我在這裡做錯了什麼嗎? - 無論我做什麼,我總是看到峰值超過 -maxrate
- 我的理解是 FFMPEG 對位元率執行軟上限。它是否正確?
- 如何實現比特率硬性上限?
感謝您就此事提供的任何幫助。我已經在這個問題上努力了一段時間了,所以我真的很感激!