ffmpeg刪除沒有運動的部分

ffmpeg刪除沒有運動的部分

我有一個 IP 安全攝影機 (192.168.0.8),它能夠透過網路廣播 rtsp 內容。

我可以使用計算機上的下一個 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請注意,當您使用視訊濾鏡時,您將無法使用。

相關內容