を使用して、MJPEGからMPEG2にセキュリティカメラのリアルタイム映像をトランスコードしていffmpegます。
残念ながら、トランスコーディングを実行するマシンは実際には対応できません(100%のCPU使用率)が、それでも「十分」であり、時々フレームがドロップされることはありません。しかし、何らかの理由ffmpegでフレームがドロップされないため、プロセスが着信フレームに遅れてメモリ使用量が増加し続け、マシンがメモリ不足になり、ビデオがひどく破損し始めます。
ffmpegフレームをより積極的にドロップするように指示する方法はありますか?メモリ使用量が1.9GBに達すると問題が発生するため、メモリが1.5GBを超えるとmonitプロセスを再起動しようとしましたが、10分ごとに再起動され、各トランスコードされたファイルの推奨15分長が壊れます。
これは私が使用しているコマンドです:
ffmpeg -overrun_nonfatal 1 -y -i udp://1.2.3.4
    -c mpeg2video -b:v 2M -vf transpose=2
    -preset ultrafast -an -r 30
    out.mkv
マンページには、-rオプションをフレームをドロップする出力オプションとして使用できると書かれていますが、私はこれを行っていますが、入力ストリームに追いつくためにフレームをドロップするのではなく、出力フレームレート(ここでは30fps)に一致するようにフレームをドロップするだけです。
この-vsyncオプションは、バッファリングを最小化するのではなく、フレームレートを一致させようとして、同様のことを行うようにも見えます。
-frame_drop_threshold より有望に見えますが、これは、リアルタイムエンコーディングに追いつくのではなく、タイムスタンプに追いつくためにフレームをドロップすることについてのようです。
私が使用できる他のオプションはありffmpegますか?これはリアルタイム/ストリーミング/低遅延オプションにあると思いますが、何も見つからないようです!
-rは、入力タイムスタンプを再生成することです。
                -vf realtimeし、それが違いを作るかどうかを確認
                -vf realtime似て-reいます。処理は既にリアルタイム(約0.8倍)よりも低速で実行されているため、フレームがドロップされる原因を誤解していない限り、これが違いを生むとは思いませんか?
                
-r XX最初-iの入力の前に追加を試して、入力の読み取り速度を制限することをお勧めします。