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

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

werners1
尊敬的貢獻者三世

ffmpeg afaik不能運行在一個分布式的方式。所以它將運行在司機。

如果你想ffmpeg並行運行,你必須找到一些分布式的版本。我發現一些github項目但他們似乎很死了。

或許你可以看看OpenCV。

前一段時間我與人AI(計算機視覺)視頻,和他們使用Nvidia Deepstream。可能值得考慮。

DataBRObin
新的貢獻者三世

我相信是真的,因為我隻是使用的python庫實現它。順序是否有一種方法來運行它在司機一旦一行被處理它的手去外麵的執行人,能否實現它的記憶我會沒事的(我的主要問題在於內存使用,不是速度/ cpu利用率),但我不知道如果有一種方法可以做到這一點。

我要看看OpenCV,雖然上次我檢查我無法解密工作。

Deepstream似乎是一個完全的端到端係統,因為我有一些定製預處理做我不認為我可以工作(很容易)。

謝謝你的回答!

DataBRObin
新的貢獻者三世

最後,我設法讓它工作。我的方法就是每個集群節點隻有一個執行人(指定遺囑執行人。核心節點核心數2和內存允許)和重新分區的分區比表中的行和限製視頻處理的數量。如果有人有更好的主意比我的解決方案,允許更多的parallelisation然後讓我知道!

Vidula
尊敬的貢獻者

嗨@Robin G

希望一切都好!隻是想檢查如果你能解決你的問題,你會很高興分享解決方案或答案標記為最佳?其他的請讓我們知道如果你需要更多的幫助。

我們很想聽到你的聲音。

謝謝!

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

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

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

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

Baidu
map