日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

修復(fù)ffmpeg寫文件時的幀率異常問題記錄

作者:菜鳥清清 更新時間: 2022-05-13 編程語言

前言

最近在一臺部署運(yùn)行了近一年的服務(wù)器上發(fā)現(xiàn)了一個問題,用戶上傳的視頻文件,在經(jīng)過一系列的處理后,使用moviepy寫文件時,會消耗非常長的時間,同時還占滿了CPU內(nèi)存資源,使得其他請求無法處理。

排查問題

首先查看后臺正在運(yùn)行的命令,發(fā)現(xiàn)是ffmpeg正在處理視頻,這是因?yàn)閙oviepy就是基于ffmpeg開發(fā)的python庫,因此其中的視頻處理操作的本質(zhì)都是使用ffmpeg。

通過log分析,處理是卡在了寫文件這一步,程序沒有報錯返回,但由于寫文件占滿了全部的CPU資源,因此其他用戶的請求也無法處理。此外,因?yàn)橄到y(tǒng)已經(jīng)使用了一年之久,不應(yīng)該會出現(xiàn)低級問題。因此,我將懷疑點(diǎn)放在了當(dāng)前處理的這一段視頻文件上面。

我將懷疑的視頻文件導(dǎo)出,與其他視頻比較,并沒有任何區(qū)別。但是用程序處理時,處理時間遠(yuǎn)大于其他視頻。

確認(rèn)問題并解決

moviepywrite_videofile方法,在視頻處理部分調(diào)用了ffmpeg_write_video,我將其中的參數(shù)打印出來后,發(fā)現(xiàn)幀率fps的異常,默認(rèn)視頻幀率為缺省值,即寫出來的視頻應(yīng)與原始視頻一致。但這一段特殊的視頻,ffmpeg檢測其幀率竟然為900000!要知道,通常用戶上傳的視頻幀率都在20-30之間。寫一段90萬幀的視頻,當(dāng)然會耗盡CPU資源了。

解決思路是獲取一下原始視頻的幀率,然后在寫視頻時指定該幀率。這里利用了opencv提供的方法。

# 使用opencv獲取視頻的幀率
source_video = cv2.VideoCapture(source_file)
fps = source_video.get(cv2.CAP_PROP_FPS)

# 使用moviepy實(shí)例化視頻
source_video = VideoFileClip(source_file)

# 在寫文件時,指定輸出幀率
video.write_videofile(target_file, fps=fps)

# 釋放占用
source_video.close()

這樣寫視頻就不會異常占滿CPU資源了。

原文鏈接:https://blog.csdn.net/nchu_zhangyiqing/article/details/124401228

欄目分類
最近更新