
我有幾個 IP 攝像頭,我想連續捕獲視頻。我正在建立一個腳本,該腳本將環繞 ffmpeg 以從各種 RTSP 來源捕獲。但我正在努力解決如何捕獲和存儲數據..具體來說,如何捕獲無縫剪輯?
澄清一下,如果我只是運行這樣的命令:
ffmpeg -i rtsp://ip_cam file.mp4
這將永遠運行,直到它填滿我的硬碟(或直到我達到 ffmpeg 或檔案系統的某個上限)。所以我的想法是做這樣的事情:
ffmpeg -i rtsp://ip_cam -fs 104857600 file-1.mp4
這會將每個檔案限制為 100MB。我的包裝器腳本可以在該實例完成後立即啟動一個新實例:
ffmpeg -i rtsp://ip_cam -fs 104857600 file-2.mp4
等等(我可以有一個單獨的進程,確保根據需要清除舊文件以恢復空間)。這種方法的問題是 ffmpeg 啟動需要 1-2 秒,這意味著在此期間相關攝影機沒有記錄任何內容。
需要考慮的另一件事是,對於每個文件,我需要知道開始和停止時間戳,例如,file-1.mp4
可能指“2015-09-12 09:03:42”到“2015-09-12 11:24” : 21”。這樣,如果用戶想要檢索特定剪輯,我知道從哪裡獲取它。如果我為每個剪輯啟動 ffmpeg,然後在每個剪輯的末尾結束,我可以捕獲並儲存該資訊。但是,如果建議的方法是告訴 ffmpeg 無限期運行,同時將輸出保存在單獨的區塊中(如果 ffmpeg 可以做到這一點),那麼這可能不起作用,因為我將無法收集此資訊。
任何見解將不勝感激。
答案1
嘗試一下分段復用器。
ffmpeg -i rtsp://ip_cam -c copy -f segment -segment_list out.list -segment_time 900 \
-segment_atclocktime 1 -strftime 1 "%Y-%m-%d_%H-%M-%S.mkv"
-segment_list
產生列表文件。-segment_time
設定分段持續時間。該值必須是持續時間規範。預設值為 2。請參閱分段復用器文檔了解更多。-segment_atclocktime
如果設定為“1”,則從 00:00 點開始按固定時鐘時間間隔進行分割。中指定的時間值-segment_time
用於設定分割間隔的長度。例如,將segment_time設定為“900”,這使得可以在12:00、12:15、12:30等建立檔案。-strftime
這允許按檔案建立時間命名段。
輸出檔名範例:
$ ls -m1
2015-09-12_14-10-02.mkv
2015-09-12_14-10-14.mkv
2015-09-12_14-10-24.mkv
2015-09-12_14-10-34.mkv
2015-09-12_14-10-44.mkv
2015-09-12_14-10-54.mkv
請參閱文件了解更多選項和資訊。