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

PyInstaller打包后无法保存摄像头录制视频问题求助

解决方案建议

1. 匹配实际捕获帧的尺寸

摄像头实际输出的帧分辨率可能和你指定的(640,480)不一致,导致写入的视频文件结构损坏。修改脚本,先获取摄像头的实际分辨率再初始化VideoWriter:

import cv2
import sys
import os

# Set up video capture
video_capture = cv2.VideoCapture(1)
# 获取摄像头实际输出的分辨率
frame_width = int(video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))

fourcc = cv2.VideoWriter_fourcc(*'XVID')
# 使用实际分辨率初始化视频写入器
video_out = cv2.VideoWriter('output.avi', fourcc, 12.0, (frame_width, frame_height))

# Record video
while True:
    ret, frame = video_capture.read()
    if not ret:
        break  # 捕获帧失败时直接退出循环
    video_out.write(frame)
    cv2.imshow('Video', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release resources
video_out.release()
video_capture.release()
cv2.destroyAllWindows()

2. 让PyInstaller自动收集OpenCV依赖

手动添加dll可能存在路径处理问题,改用--collect-data cv2参数让PyInstaller自动收集所有OpenCV相关依赖文件:

pyinstaller --onefile --collect-data cv2 sample.py

打包完成后,exe所在目录会生成cv2文件夹,里面包含FFmpeg等必要依赖,确保该文件夹与exe放在同一目录下运行。

3. 使用绝对路径保存视频

打包后的exe运行时,当前工作目录可能不是exe所在目录,导致视频写入路径异常。修改保存路径为exe所在的绝对路径:

# 获取exe文件所在的绝对目录
output_dir = os.path.dirname(sys.executable)
output_path = os.path.join(output_dir, 'output.avi')
video_out = cv2.VideoWriter(output_path, fourcc, 12.0, (frame_width, frame_height))

4. 更换视频编码格式

尝试改用兼容性更好的编码格式,比如MJPG,部分编码在打包后可能无法正常工作:

fourcc = cv2.VideoWriter_fourcc(*'MJPG')

注意:不同编码对应合适的文件扩展名,MJPG可搭配.avi或.mov使用。

5. 检查摄像头索引

打包后系统识别的摄像头索引可能变化,比如从1变为0,尝试修改cv2.VideoCapture(0)后重新打包测试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:47:11