簡體   English   中英

我正在嘗試通過 Python 和 ffmpeg 從網絡攝像頭保存幀,但視頻變得快速

[英]I am trying to save frames from a webcam via Python and ffmpeg, but the video becomes way to fast

我從我的網絡攝像頭獲得了cv2圖像流,並希望將其保存到視頻文件中。 在使用cv2.VideoWriter()玩了一下之后,結果發現使用ffmpeg會提供更多選項,並且 - 顯然,在 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>

作為記錄,我正在從 VidGear 庫中創建WriteGear類,如下所示:

video_params = {
    "-vcodec": "libx265",
    "-crf": 25,
    "-input_framerate": 25,
    "-r": 25,
}
WriteGear(output_filename=video_file, logging=True, **video_params)

任何想法我在這里做錯了什么以及我需要如何調用ffmpeg?

好的,我現在通過使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM