【问题标题】:Moviepy OSError Exec format error - Missing Shebang?Moviepy OSError Exec 格式错误 - 缺少 Shebang?
【发布时间】:2016-10-12 17:19:27
【问题描述】:

我正在尝试在 Raspian 上将 MoviePy 与 Python 3.2.3 一起使用。 我已经安装了它(对于 Python 2.7、3.2 和 3.5...长篇大论)和行

from moviepy.editor import *

工作正常。 当我尝试时

clip = VideoFileClip("vid.mov")

这是最基本的命令,它给出了错误

Traceback (most recent call last):
File "/home/pi/QuickFlicsPics/moviepytest.py", line 8, in <module>
  clip = VideoFileClip("vid.mov")
File "/usr/local/lib/python3.2/distpackages/moviepy/video/io/VideoFileClip.py", line 55, in __init__
  reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt)
File "/usr/local/lib/python3.2/dist-packages/moviepy/video/io/ffmpeg_reader.py", line 32, in __init__
   infos = ffmpeg_parse_infos(filename, print_infos, check_duration)
File "/usr/local/lib/python3.2/dist-packages/moviepy/video/io/ffmpeg_reader.py", line 237, in ffmpeg_parse_infos
  proc = sp.Popen(cmd, **popen_params)
File "/usr/lib/python3.2/subprocess.py", line 745, in __init__
  restore_signals, start_new_session)
File "/usr/lib/python3.2/subprocess.py", line 1371, in _execute_child
  raise child_exception_type(errno_num, err_msg)

OSError: [Errno 8] Exec format error

我已经研究过这个错误,它似乎与某处丢失的 shebang 线有关。这是否正确,如果是,我该如何查找它丢失的位置,以及我要添加什么? 谢谢

编辑: 根据 cxw 的评论,我使用命令安装了moviepy

pip-3.2 install moviepy

(我可能也使用过“sudo”)

当我第一次使用moviepy时应该自动下载FFMPEG:

MoviePy 依赖 FFMPEG 软件进行视频读写。 > 您无需担心,因为 FFMPEG 应该会在您第一次使用 MoviePy 时由 ImageIO 自动下载/安装(需要几秒钟)。如果您想使用特定版本的 FFMPEG,请按照文件 config_defaults.py 中的说明进行操作。

[引用安装指南here]

【问题讨论】:

  • sp.Popen 调用中的cmdpopen_params 是什么?如果不知道,可以在遇到断点时在 pdb 提示符处运行 python -m pdb -c "b /usr/local/lib/python3.2/dist-packages/moviepy/video/io/ffmpeg_reader.py:237" -c c your_script.pythis,然后运行 ​​p cmdp popen_params
  • 它可能根本不是一个shebang——它可能是为错误的架构编译的二进制文件;)。请edit your question 包含您用于安装moviepy 和ffmpeg 的命令。
  • @cxw 您的命令给出了“错误:-c 不存在”
  • 很抱歉给您带来了困惑!根据链接的答案,应该在 pdb 3.2 中 - 我只是从那里拉出来的,我自己还没有尝试过:)。哦 - 我应该说python3 而不是python。或者执行python3 -m pdb your_script.py,然后在pdb 提示符下输入bc 命令。
  • 我尝试了你更新的命令,没有运气,但我不确定现在是否需要它们。

标签: python linux python-3.x raspberry-pi moviepy


【解决方案1】:

手动下载 ffmpeg,然后在运行你的 Python 代码之前,做

export FFMPEG_BINARY=path/to/ffmpeg

在 shell/终端提示符下。

the source所知,ffmpeg的自动下载不知道树莓派。 auto-download code 来自 the imageio github repo,它只知道“linux32”与“linux64”。看起来它没有 ARM-linux 选项。当 ARM 内核看到非 ARM 映像时,它会抛出您看到的错误。

您可以编辑您的moviepy config-defaults.py 文件以指定FFMPEG_BINARY = r"/path/to/ffmpeg",而不是使用环境变量。

编辑在用apt-get安装后找到path/to/ffmpeg,做

dpkg -L ffmpeg | grep bin

在 shell/终端提示符下。它可能会在/bin/usr/bin 中,并且可能会被称为ffmpegffmpeg-x.xx(带有一些版本号)。
感谢this answer dpkg

【讨论】:

  • 我已经使用“suso apt-get install ffmpeg”安装了 FFMPEG。 “shell提示符”在哪里是终端?
  • 我已经把它放在终端里了,没有发生任何事情(好的或坏的)。当我运行程序时,我得到了错误:
  • 我收到错误消息:'IOError [...] 文件可能已损坏 [...] 可能正在使用已弃用的 FFMPEG 版本 [...] 在 Debian 上,例如回购已弃用。请从网站更新到最新版本'。似乎相当不言自明,是我见过的最有用的错误消息:)
  • 非常感谢!我一直试图解决这个问题一个星期! apt-get ffmpeg install 不起作用后,我按照these 的指示,信了,所有的问题都立马解决了。
  • @Gloin 太棒了!很高兴能够提供帮助。
猜你喜欢
  • 2016-12-14
  • 2016-04-15
  • 2016-07-08
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 2017-02-07
  • 2015-02-20
  • 2022-11-03
相关资源
最近更新 更多