You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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()

关键说明

  1. 画质参数的传递:在创建VideoWriter时,通过params参数传入[cv2.IMWRITE_JPEG_QUALITY, 画质值]的元组,即可覆盖默认的JPEG压缩质量。
  2. 参数调整建议:你可以逐步测试不同的画质值(比如从50开始,上下调整),找到画质可接受、体积满足需求的平衡点。
  3. 代码优化:原代码中int('320')这类字符串转整数的写法没必要,直接使用数值即可,已在修改后的代码中调整。

内容的提问来源于stack exchange,提问作者portsample

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:31:13