如何通过OpenCV降低Motion JPEG录像画质以减小文件体积?
问题:通过OpenCV调整MJPG视频的JPEG画质以减小文件体积?
可以通过OpenCV实现这个需求。OpenCV的VideoWriter类针对MJPG格式,支持设置单帧JPEG的压缩画质参数,以此降低整体视频文件体积。
具体实现方法
MJPG格式本质是逐帧JPEG图像的容器,你可以通过指定cv2.IMWRITE_JPEG_QUALITY参数来控制每帧的压缩质量,取值范围为0-100(数值越小,画质越低、压缩率越高、文件体积越小),默认值为95。
修改后的代码
#!/usr/bin/env python3 import cv2 import time import imutils cap = cv2.VideoCapture(0) if not cap.isOpened(): print("无法读取摄像头画面") capture_duration = 60 sleep_duration = 0 frame_width = 320 frame_height = 240 frame_per_sec = 1 # 设置JPEG画质,这里设为50,可根据需求调整 jpeg_quality = 50 # 添加画质参数到VideoWriter的构造参数中 out = cv2.VideoWriter( 'C:\\videoPy\\LZ\\outputvideo.avi', cv2.VideoWriter_fourcc('m','j','p','g'), frame_per_sec, (frame_width, frame_height), # 传递画质参数,以元组形式传入 params=[cv2.IMWRITE_JPEG_QUALITY, jpeg_quality] ) start_time = time.time() while int(time.time() - start_time) < capture_duration: ret, frame = cap.read() if ret: frame = imutils.resize(frame, width=frame_width) out.write(frame) time.sleep(sleep_duration) cv2.imshow('frame', frame) # 按Q键停止录制 if cv2.waitKey(1) & 0xFF == ord('q'): break else: break cap.release() out.release() cv2.destroyAllWindows()
关键说明
- 画质参数的传递:在创建
VideoWriter时,通过params参数传入[cv2.IMWRITE_JPEG_QUALITY, 画质值]的元组,即可覆盖默认的JPEG压缩质量。 - 参数调整建议:你可以逐步测试不同的画质值(比如从50开始,上下调整),找到画质可接受、体积满足需求的平衡点。
- 代码优化:原代码中
int('320')这类字符串转整数的写法没必要,直接使用数值即可,已在修改后的代码中调整。
内容的提问来源于stack exchange,提问作者portsample
相关产品推荐
相关产品推荐

