私は 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 のグラフは次のようになります。
3つの質問:
- ここで何か間違っているのでしょうか? - 何をしても、常に -maxrate を超えるピークが表示されます
- 私の理解では、FFMPEG はビット レートに対してソフト キャップを実行します。これは正しいですか?
- ビットレートのハードキャップを実現するにはどうすればよいですか?
この件に関してご助力いただければ幸いです。私はしばらくの間この問題に頭を悩ませてきましたので、本当に助かります。