【问题标题】:Exe file build by Pyinstaller can not save video with cv2.VideoWriterPyinstaller 构建的 exe 文件无法使用 cv2.VideoWriter 保存视频
【发布时间】:2019-12-23 03:01:23
【问题描述】:

我编写了一个名为videoSave.py 的python 脚本来读取相机并保存视频。代码如下:

import cv2


def saveCam():
    video = cv2.VideoCapture(0)
    ret, img = video.read()

    h, w = img.shape[:2]
    videoSaver = cv2.VideoWriter("videoSave_test.avi", cv2.VideoWriter_fourcc(*'DIVX'), 10, (w, h))

    key = 0
    while key != 27:
        ret, img = video.read()
        if not ret:
            break

        cv2.imshow('img', img)
        key = cv2.waitKey(1) & 0xFF
        videoSaver.write(img)

    videoSaver.release()


if __name__ == '__main__':
    saveCam()

这个脚本在直接运行时效果很好。它可以显示相机获取的图像并将内容保存到视频文件中。

然后我使用命令pyinstaller -F videoSave.py 将此脚本构建到 exe 文件中。我可以得到exe文件。而且执行的时候可以看到摄像头得到的图像,但是它保存的视频文件大小为零

我的环境是:
Python 3.7.4
视窗 7
Pyinstaller 3.5
opencv 4.1.2

【问题讨论】:

  • 我通过将opencv_video_ffmpeg412_64.dllAnaconda3\envs\your_env_name复制到exe文件所在的目录解决了这个问题。但我不知道为什么。
  • 你解决了吗?我有确切的问题。

标签: python pyinstaller opencv3.0


【解决方案1】:

我通过将 opencv_video_ffmpeg412_64.dll 从 Anaconda3\envs\your_env_name 复制到 exe 文件所在的目录来解决了这个问题。但我不知道为什么。

【讨论】:

    【解决方案2】:

    你必须在.exe中打包opencv_videoio_ffmpeg420_64.dll

    为此,请以这种方式使用--add-binary 选项(我认为您也可以使用--add-data 选项):

    pyinstaller --onefile videoSave.py --add-binary venv\Lib\site-packages\cv2\opencv_videoio_ffmpeg420_64.dll;.
    

    当然,您必须指定自己的 .dll 路径(.dll 有时可能有其他名称)。

    请注意,最后是“;”。在 Windows 上和“:.”在大多数 unix 系统上,指定为 here(部分:“捆绑什么,在哪里搜索”)

    根据这个issue看来是因为Pyinstaller没有在.exe中打包opencv_ffmpeg340.dll,这是保存视频文件所必需的。

    看起来您可以手动将 .dll 复制并粘贴到 .exe 所在的同一文件夹中,程序会读取它,这将解释 @ToughMind 提供的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 2014-01-19
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多