Проблема с разрешениями Python и ffmpeg на Mac - PullRequest
0 голосов
/ 13 апреля 2020

Я довольно плохо знаком с Python (~ 4 недели), и я боролся с этим весь день.

Я использую MacOS 10.13, Python 3.7 через Anaconda Navigator 1.9.12 и Spyder 4.0.1.

Каким-то образом (помните, только нуб) у меня было 2 анакондовых окружения. Я не занимаюсь производственным кодом, а просто исследую, поэтому я решил, что я бы упростил жизнь и просто использовал базовую среду. Я удалил другую среду.

Ранее я работал с FFmpeg и мог делать захват кадров, создавать анимации mpeg и конвертировать их в gif для сообщений в блоге и тому подобного. У меня был установлен FFmpeg в каталогах, связанных с удаленной средой, поэтому он исчез.

Не беспокойтесь, я получил URL git, использовал Terminal для установки его в / opt / anaconda3 / bin. Это все, и я могу запустить FFmpeg из Терминала.

Моя проблема: Когда я пытаюсь запустить модуль, который ранее работал нормально, я получаю следующее сообщение:

[Errno 13] Разрешение denied: '/ opt / anaconda3 / bin / ffmpeg'

В моем модуле я установил расположение FFmpeg по умолчанию: plt.rcParams ['animation.ffmpeg_path'] = '/ opt / anaconda3 / bin / ffmpeg'

В моем модуле у меня есть следующие строки:

writer = animation.FFMpegWriter(fps=frameRate, metadata=metadata)
writer.setup(fig, "animation.mp4", 100)

Это вызывает matplotlib 'animation.py', который запускает следующее:

def setup(self, fig, outfile, dpi=None):
    '''
    Perform setup for writing the movie file.

    Parameters
    ----------
    fig : `~matplotlib.figure.Figure`
        The figure object that contains the information for frames
    outfile : str
        The filename of the resulting movie file
    dpi : int, optional
        The DPI (or resolution) for the file.  This controls the size
        in pixels of the resulting movie file. Default is fig.dpi.
    '''
    self.outfile = outfile
    self.fig = fig
    if dpi is None:
        dpi = self.fig.dpi
    self.dpi = dpi
    self._w, self._h = self._adjust_frame_size()

    # Run here so that grab_frame() can write the data to a pipe. This
    # eliminates the need for temp files.
    self._run()

def _run(self):
    # Uses subprocess to call the program for assembling frames into a
    # movie file.  *args* returns the sequence of command line arguments
    # from a few configuration options.
    command = self._args()
    _log.info('MovieWriter.run: running command: %s', command)
    PIPE = subprocess.PIPE
    self._proc = subprocess.Popen(
        command, stdin=PIPE, stdout=PIPE, stderr=PIPE,
        creationflags=subprocess_creation_flags)

Все работает нормально до последней строки (то есть «команда» выглядит как хорошо отформатированная командная строка FFmpeg, PIPE возвращает -1), но subprocess.Popen () выводит сообщение об ошибке выше.

Я пытался изменить файл разрешения - использование подхода кувалдой и установка всего в / opt / anaconda3 / bin / ffmpeg равной 777, чтение, запись и выполнение. Но это, похоже, не имеет никакого значения. Я действительно не знаю, когда дело доходит до ОС Apple, прав доступа к файлам и т. Д. c. Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...