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 のグラフは次のようになります。

出力

3つの質問:

  1. ここで何か間違っているのでしょうか? - 何をしても、常に -maxrate を超えるピークが表示されます
  2. 私の理解では、FFMPEG はビット レートに対してソフト キャップを実行します。これは正しいですか?
  3. ビットレートのハードキャップを実現するにはどうすればよいですか?

この件に関してご助力いただければ幸いです。私はしばらくの間この問題に頭を悩ませてきましたので、本当に助かります。

関連情報