簡體   English   中英

無法使用 OpenCV 和 Python 寫入和保存視頻文件

[英]Can't write and save a video file using OpenCV and Python

我正在嘗試處理來自視頻 stream 的幀,並將其作為新視頻處理。

這就是我正在做的事情:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('Videos/output.mp4',fourcc, fps, (1080,1080))

我不斷得到:

OpenCV: FFMPEG: tag 0x44495658/'XVID' is not supported with codec id 13 and format 'mp4 / MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x00000020/' ???'

我想我使用了錯誤的fourcc值......我應該使用哪一個? 我已經嘗試了很多。

我正在使用 Ubuntu 16.04、Python 2.7.11 和 OpenCV 3.1.0

定義編解碼器並像這樣創建 VideoWriter 對象

fourcc = cv2.VideoWriter_fourcc(*'MPEG')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

對於 Windows 用戶

我在 Windows 10 上使用 OpenCV 2 和 Python 3.6。

'XVID'編解碼器以及生成.avi文件似乎是最通用的解決方案(如果不是唯一有效的解決方案)。

fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('test.avi', fourcc, 60, (320, 240))

另外,只有BGR可以直接用這樣的VideoWriter聲明來寫。 不要嘗試寫入灰色幀:輸出將為空。

您遇到的問題是您試圖以XVID格式導出幀,但輸出文件的名稱以.mp4結尾。 您應該將導出格式更改為MP4V或將輸出文件的名稱更改為.avi

fourcc = cv2.VideoWriter_fourcc(*'MP4V')
out = cv2.VideoWriter('Videos/output.mp4',fourcc, fps, (1080,1080))

替代品

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('Videos/output.avi',fourcc, fps, (1080,1080))

在這里您可以找到有關視頻編解碼器的更多信息

您提供的框架(寬度,高度)的大小應與您要保存的框架的大小相匹配。 所以
fw = int(cap.get(3)) fh = int(cap.get(4)) print("w,h",fw,fh) out = cv2.VideoWriter('fb1.avi',cv2.VideoWriter_fourcc('X','V','I','D'), fps, (fw,fh))

如果你想通過opencv以mp4格式保存視頻,讓

按照這個鏈接

你應該更換:

fourcc = cv2.VideoWriter_fourcc(*'XVID')

通過:

fourcc = cv2.VideoWriter_fourcc(*'FMP4')

我嘗試並成功了。

我有同樣的問題。 對我來說,原來是我切換了視頻的高寬,所以幀尺寸不符合視頻規格,結果什么也沒寫。 確保它們完全匹配。

此外,如果文件擴展名與使用的編解碼器不匹配,OpenCV 似乎也會發出相同的警告。 具體來說,它需要 .avi 用於 XVID 編解碼器。

如果您使用的是 linux 試試這個

Fourcc = 0x00000021
out = cv2.VideoWriter('Videos/output.mp4',fourcc, fps, (1080,1080))

我想保存為 .mp4,結果證明使用*"mp4v"是正確的代碼,至少在 Linux 上是這樣。

安裝 K-Lite Mega Codec Pack: https : //filehippo.com/download_klite_mega_codec/
出現此錯誤是因為某些編解碼器在 Windows 媒體播放器中默認不可用。 因此,通過安裝此軟件,視頻可以使用相同的代碼正常運行。

我嘗試使用不同的 cv2.VideoWriter_fourcc 類型,我在答案中找到了。 我的系統響應:

OpenCV:FFMPEG:標簽 0x34504d46/'FMP4' 不受編解碼器 ID 12 和格式'mp4 / MP4(MPEG-4 Part 14)'的支持 OpenCV:FFMPEG:回退使用標簽 0x7634706d/'mp4v'

所以我使用了 FFMPEG 在錯誤消息中建議的內容。 我設置了fourcc = 0x7634706d並且它起作用了。 多謝你們 :)

在 Mac 上

writer = cv2.VideoWriter('mysupervideo.mp4', cv2.VideoWriter.fourcc(*'mp4v'), 20, (width, height))

效果更好

暫無
暫無

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

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