取消
顯示的結果
而不是尋找
你的意思是:

FFmpeg幀提取爆炸內存,如何緩解?

DataBRObin
新的貢獻者三世

計算機視覺項目,我的原始數據由加密視頻(60 fps)存儲在Azure Blob存儲。為了使數據用於模型訓練,我需要做一些預處理和我需要視頻分成單獨的幀。視頻加密但我可以通過FFmpeg的加密密鑰解密視頻文件。我已經找到一種方法來“管”FFmpeg(幀數)的輸出發送到stdout,可以通過python FFmpeg庫拿起。問題在於,即使是幾分鍾的視頻中,一個集群有112 gb內存已經跑到伯父錯誤。

我試著什麼:

  1. 原始的方法:使用foreach抽樣的視頻位置提取幀和寫他們在blob存儲到一個新的位置。這個工作雖然很緩慢,大量小尺寸使得這種方法高得驚人的圖像在blob存儲(我的老板顯然不喜歡)。
  2. 熊貓在python中UDF返回圖像。但有時甚至一分鍾的視頻作品耗盡內存。
  3. 添加列,每個視頻的開始和結束時間(如1分鍾的視頻分割在5第二部分)。我的想法是,這減少了內存使用量每一行發送到熊貓UDF但似乎FFmpeg掃描整個視頻,因此使用很長一段內存。
  4. 在熊貓運行。工作更可靠但使用大量內存(如熊貓DFs完全存儲在內存中)和改變著熊貓dataframe pyspark DF使用很多額外的內存,需要時間,也使它成為理想的選擇。

我想要的:

從視頻中提取幀和管產生的幀pyspark DF進行進一步處理,不需要一個巨大的集群,隻能進行預處理幾分鍾的視頻(使它非常昂貴)。我非常開放使用不同的庫和不同的配置,任何方式都可以讓我做我想做的任務是我想嚐試!

行數據的示例:

container_name:“sample_container_name”

文件名:“/ dbfs / mnt /…/…/ ....... / video.mp4x”

持續時間:25.6

身高:1080

寬度:1920

#嚐試與時間間隔(以秒為單位,這意味著每間隔間隔5秒= 300幀)

開始:0

結束:5

6個回答6

DataBRObin
新的貢獻者三世

嗨@Vidula卡納

希望你做的好!我還沒有真正能夠解決我的問題在解決上麵提到的,有一個非常低的視頻處理時間與一個大型虛擬機,所以我考慮這個問題還沒有解決(我不喜歡我自己的答案標記為最好,特別是當它是如此不完美:slightly_smiling_face:)。如果你能提供更多的指向一個更好的解決方案,當然會非常歡迎!

DataBRObin
新的貢獻者三世

最後,我決定改變在工作流是盡可能高效的想象:

  1. 提取視頻文件的框架集裝箱應用程序某處運行ffmpeg和儲存鋪文件中生成的框架在blob存儲(更低的IO費用)
  2. 在鋪上運行預處理文件提取的圖像在磚。
  3. 將結果存儲在鋪在blob存儲文件。

我希望會有更少的迂回的方式,但這就是我設法解決它在一個相當有效的方法(成本)

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map