FFmpeg/AVconc - 捕捉無縫視頻

FFmpeg/AVconc - 捕捉無縫視頻

我有幾個 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

請參閱文件了解更多選項和資訊。

相關內容