ffmpeg 動きのない部分を削除する

ffmpeg 動きのない部分を削除する

ネットワーク経由で rtsp コンテンツをブロードキャストできる IP セキュリティ カメラ (192.168.0.8) があります。

コンピューターから次の ffmpeg コマンドを使用して、その (RAW) コンテンツを変更せずに保存できます。

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -acodec copy -vcodec copy test-raw.mp4

また、その場でサイズを変更することもできます。

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -vf  "scale=640:-1" test640.mp4

しかし、動き検出部分のみを含むビデオだけを保存するにはどうすればよいでしょうか?

ffmpegを使って解決しようとしたシーン変更フィルター、しかし運がなかった。

私の目標は、カメラの近くで誰かが動いていることを検出し、それをビデオ ファイルに保存する、一般的なビデオ監視ソリューションを実現することです。ストリームからオンザフライで実行できない可能性があることを理解しています。そのため、最初に大きなファイルを保存し、別の ffmpeg コマンドで処理して、動きが検出された部分のみを含む新しいビデオ ファイルを生成することは問題ありません。具体的に何をさらに調査すればよいかアドバイスをいただければ、大変ありがたく思います。

私のカメラ ストリームは音声なしで送信されます。そのため、元のビデオから画像のセットを生成し、適切な画像を選択して、画像から新しいビデオを保存できます。

答え1

私がやることは、まさにあなたが言ったように、ストリームの大きなファイルを保存し、select FFMPEG フィルターsceneたとえば、連続するフレームの類似性を比較する式を使用します 。数値select=gt(scene\,0.003)が大きいほど、フレーム間の変化が無視されます。簡単なテストでは、処理する映像の種類に応じて、0.00001 ~ 0.00005 まで下げる必要がある場合があります。

それとsetpts フィルター、これはビデオ フレームの「開始時間」を変更し、次のような結果になります (25fps ビデオの場合)。

ffmpeg -i input.mp4 -vf "select=gt(scene\,0.003),setpts=N/(25*TB)" output.mp4

-vcodec copyただし、ビデオフィルターを使用する場合は使用できなくなります。

関連情報