一定のビットレートを維持できない FFmpeg

一定のビットレートを維持できない FFmpeg

私は StackOverflow を初めて使用します。質問を適切に構成する方法がわかりません。

私はプロジェクト用にメディア ストリーミング サーバーを作成しようとしています。このサーバーでは、ラズベリー カメラが nginx rtmp サーバーにストリーミングし、コンピューターが定期的にストリームからチャンクを作成して として保存します.h264

これは、実行中の ffmpeg コマンドですpicamera(Python 2.7 と picamera ライブラリを使用しています)。

cmdline = ['ffmpeg', '-i','-','-vcodec','copy','-crf','30','-maxrate','2M','-bufsize',' 1M','-an', '-f','flv', Cam_URL]
logger.debug("Starting the streaming process to server")
rtmpstream = subprocess.Popen(cmdline, stdin=subprocess.PIPE)
try:
    camera.framerate = 24
    camera.resolution = (1280, 720)
    camera.brightness = int(config_hash['Brightness'])
    camera.rotation = int(config_hash['Rotation'])
    camera.iso = int(config_hash['ISO'])
    camera.sharpness = int(config_hash['Sharpness'])
    camera.start_recording(rtmpstream.stdin, quality = 20,bitrate = 0, format = 'h264')

ffmpeg私のマシンでは:

ffmpeg -i (media server url) -vcodec copy -maxrate 2M -bufsize 1M qwertyuip.h264

録画前の Pi のビットレートは 2M ビット程度で一定ですが、PC で録画を開始すると、Pi のビットレートが 11000k ビットまで急激に増加します。これにより、すべての帯域幅が消費されます。

ほぼ一定のビットレートを維持するのを手伝ってもらえますか?

答え1

オプション-vcodec copyと は-maxrate 2M相互に排他的です。ストリームがコピーされる (再エンコードされない) 場合、ffmpeg はデータ レートに影響を与えません (パディングを除く)。そのため、カメラから出力されるデータ レートは、ffmpeg が通過させるデータ レートになります。

次の 2 つのオプションがあります。

  • ビデオを再エンコードする( に沿って-c:v h264 -b:v 2M)が、カメラサーバーも実行しながらRasPiに十分なパワーがあるかどうかは疑問だ。
  • カメラ サーバーで適切な出力レートを生成してください。これが私が問題に取り組む方法です。まず、どのような出力オプションと設定が許可されているかを確認します。

関連情報