使用OpenCV輸出攝像頭視頻要注意輸出路徑必需添加視頻格式的后綴名,如output.mp4。
import cv2 capture = cv2.VideoCapture('test.mp4') #cv2.VideoCapture.get(CV_CAP_PROP_FORMAT) fps = capture.get(cv2.CAP_PROP_FPS) print 'fps is ' + str(fps) codec = int(capture.get(cv2.CAP_PROP_FOURCC)) print ('codec is %x'%(codec)) print ('codec is ' + chr(codec&0xFF) + chr((codec>>8)&0xFF) + chr((codec>>16)&0xFF) + chr((codec>>24)&0xFF))
cv2.CAP_PROP_FOURCC 用來得到原視頻的編碼格式。
如果是MPEG4編碼,打印結果為 “codec is 7634706d”,十六進制對應的ASCII為 'v' '4' 'p' 'm'
如果是H264編碼,打印的結果為 "codec is 31637661", 十六進制對應的ASCII為 '1' 'c' 'v' 'a'
查詢Video Codecs by FOURCC(http://www.fourcc.org/codecs.php)
1. 搜索"mp4v" (和得到的16進制倒序排列),信息如下
Eval download (MP4V) info
Homepage: Eval downloadOwner: Media Excel
MPEG-4 Video. LEAD's MCMP codec also supports this format.
2. 搜索“avc1”(和得到的16進制倒序排列),信息如下
AVC1 info
Owner: AppleApple's version of the MPEG4 part 10/H.264 standard apparently.
出現OpenCV: FFMPEG: tag 0x00000021/'!???' is not found (format 'mp4 / MP4 (MPEG-4 Part 14)')'報錯解決方法:
將fourcc = cv2.VideoWriter_fourcc(*"MJPG")的"MJPG"改成"mp4v"即可。
現在編碼用到了CV_FOURCC獲取編碼格式:
CV_FOURCC('P', 'I', 'M', '1') = MPEG-1 codec
CV_FOURCC('M', 'J', 'P', 'G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
CV_FOURCC('A', 'V', 'C', '1') = H264 codec