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

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

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

修復(fù)ffmpeg寫(xiě)文件時(shí)的幀率異常問(wèn)題記錄

作者:菜鳥(niǎo)清清 更新時(shí)間: 2022-05-13 編程語(yǔ)言

前言

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

排查問(wèn)題

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

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

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

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

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

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

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

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

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

# 釋放占用
source_video.close()

這樣寫(xiě)視頻就不會(huì)異常占滿(mǎn)CPU資源了。

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

欄目分類(lèi)
最近更新