Ошибка формата Moviepy OSError Exec — отсутствует Shebang?

Я пытаюсь использовать MoviePy с Python 3.2.3 на Raspian. Я установил его (для 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»)

FFMPEG должен был загружаться автоматически, когда я впервые использовал moviepy:

MoviePy зависит от программного обеспечения FFMPEG для чтения и записи видео. > Вам не нужно об этом беспокоиться, так как FFMPEG должен быть автоматически > загружен/установлен ImageIO при первом использовании MoviePy (это занимает несколько секунд). Если вы хотите использовать определенную версию FFMPEG, следуйте инструкциям в файле config_defaults.py.

[Цитата из руководства по установке здесь]


person Tom Burrows    schedule 12.10.2016    source источник
comment
Что такое cmd и popen_params в вызове sp.Popen? Если вы не знаете, вы можете запустить python -m pdb -c "b /usr/local/lib/python3.2/dist-packages/moviepy/video/io/ffmpeg_reader.py:237" -c c your_script.py для это, затем p cmd и p popen_params в приглашении pdb, когда вы нажмете точка останова.   -  person cxw    schedule 12.10.2016
comment
Это может быть вовсе не шебанг - это могут быть двоичные файлы, скомпилированные для неправильной архитектуры;). Пожалуйста, отредактируйте свой вопрос, включив в него команды, которые вы использовали для установки moviepy и ffmpeg.   -  person cxw    schedule 12.10.2016
comment
@cxw Ваша команда выдала «Ошибка: -c не существует»   -  person Tom Burrows    schedule 12.10.2016
comment
Извините за путаницу! Должно быть в pdb 3.2 согласно связанному ответу - я только что вытащил его оттуда и сам не пробовал :). О, я должен был сказать python3, а не python. Или выполните python3 -m pdb your_script.py, а затем введите команды b и c в приглашении pdb.   -  person cxw    schedule 12.10.2016
comment
Я попробовал ваши обновленные команды, но не повезло, но я не уверен, что они нужны сейчас.   -  person Tom Burrows    schedule 12.10.2016
comment
Я установил FFMPEG с помощью «sudo apt-get install ffmpeg».   -  person Tom Burrows    schedule 12.10.2016


Ответы (1)


Вручную загрузите ffmpeg, а затем, прежде чем запускать код Python, выполните

export FFMPEG_BINARY=path/to/ffmpeg

в командной строке/терминале.

Насколько я могу судить по источнику автоматическая загрузка ffmpeg не знает о Raspberry Pis. код автоматической загрузки извлекается из репозиторий imageio github, который знает только "linux32" и "linux64". ". Не похоже, что у него есть опция ARM-linux. Когда ядро ​​ARM видит образ, отличный от ARM, оно выдает ошибку, которую вы видите.

Вместо использования переменной среды вы можете отредактировать файл moviepy config-defaults.py файл для указания FFMPEG_BINARY = r"/path/to/ffmpeg".

Изменить, чтобы найти path/to/ffmpeg после установки с помощью apt-get, выполните

dpkg -L ffmpeg | grep bin

в командной строке/терминале. Вероятно, он будет в версии /bin или /usr/bin и, вероятно, будет называться ffmpeg или ffmpeg-x.xx (с каким-то номером версии).
Спасибо этот ответ для dpkg

person cxw    schedule 12.10.2016
comment
Я установил FFMPEG с помощью «suso apt-get install ffmpeg». Где подсказка оболочки, это терминал? - person Tom Burrows; 12.10.2016
comment
Я вставил его в терминал, ничего (хорошего или плохого) не произошло. Когда я запустил программу, я получил ошибку: - person Tom Burrows; 12.10.2016
comment
Я получил сообщение об ошибке: «Файл IOError [...] может быть поврежден [...] может использоваться устаревшая версия FFMPEG [...] В Debian, например, версия в репозиториях устарела. Пожалуйста, обновитесь до последней версии с веб-сайта». Кажется довольно понятным, и это самое полезное сообщение об ошибке, которое я когда-либо видел :) - person Tom Burrows; 12.10.2016
comment
Большое вам спасибо! Я пытался исправить это в течение недели! После того, как установка ffmpeg apt-get не сработала, я последовал за эти инструкции к письму, и все вопросы были немедленно решены. - person Tom Burrows; 12.10.2016
comment
@Глоин фантастический! Рад, что смог помочь. - person cxw; 13.10.2016