我從我的網路攝像頭獲得cv2影像流,并希望將其保存到視頻檔案中。在玩了一點之后,cv2.VideoWriter()結果發現 usingffmpeg會提供更多選項,并且 - 顯然,在 SO 上遵循一些執行緒 - 會導致更好的結果。所以我嘗試了VidGear Python 庫,它似乎作業正常。
不過有一個問題:我的網路攝像頭提供了可變幀率,大部分時間在 10 到 30 FPS 之間。保存這些幀時,視頻檔案變得太快了,就像快進觀看一樣。一分鐘實時變成視頻中的幾秒鐘。
我嘗試使用 ffmpeg-framerate和/或-r引數的各種組合,但沒有運氣。這是我現在使用的命令:
ffmpeg -y -f rawvideo -vcodec rawvideo -s 1920x1080 -pix_fmt bgra -framerate 25.0 -i - -vcodec libx265 -crf 25 -r 25 -preset fast <output_video_file>
作為記錄,我正在WriteGear從 VidGear 庫中創建類,如下所示:
video_params = {
"-vcodec": "libx265",
"-crf": 25,
"-input_framerate": 25,
"-r": 25,
}
WriteGear(output_filename=video_file, logging=True, **video_params)
任何想法我在這里做錯了什么以及我需要如何呼叫ffmpeg?
uj5u.com熱心網友回復:
好的,我現在通過使用cv2.VideoWriter()而不是 VidGear 庫解決了我的問題。不知道為什么,但我無法讓后者以正確的方式作業——要么是我沒有正確使用它,要么是庫壞了(對于我的用例)。
無論哪種方式,在使用 OpenCV 解決方案之后,結果證明使用VideoWriter該類并從網路攝像頭提供 FPS 值現在一切正常。
為了記錄,有一點需要注意:即使在為我的平臺找到了正確的編解碼器并仔細檢查了要保存的影像的尺寸之后,我仍然得到了一個“空”(1k) .mp4 視頻檔案。原因是我的網路攝像頭中的所有幀都帶有 4 個通道,但是該VideoWriter課程顯然希望使用 3 個通道的幀,而默默地丟棄所有其他“無效”幀。使用以下代碼,我能夠轉換我的 4 通道影像:
if len(image.shape) > 2 and image.shape[2] == 4:
image = cv2.cvtColor(image, cv2.COLOR_BGRA2BGR)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/472819.html
