Ошибка matplotlib.animation - система не может найти указанный файл - PullRequest
5 голосов
/ 09 февраля 2012

При попытке запустить простой пример кода анимации в python, я получаю сообщение об ошибке, которое не могу устранить.

Traceback (most recent call last):
File "D:/CG/dynamic_image2.py", line 29, in <module>
    ani.save('dynamic_images.mp4')
File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 127, in save
    self._make_movie(filename, fps, codec, frame_prefix)
File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 164, in _make_movie
    stdout=PIPE, stderr=PIPE)
File "C:\Python27\lib\subprocess.py", line 679, in __init__
    errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 893, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

Я обнаружил похожие ситуации ( ссылка1 , ссылка2 ), но все же не знаю, как разрешить мою ...

Я использую: Python 2.7.2 | EPD 7.2-2 (32-разрядная версия) | (по умолчанию, 14 сентября 2011 г., 11:02:05) [MSC v.1500 32 бит (Intel)] на win32

Надеюсь, кто-нибудь сможет мне помочь!

1 Ответ

1 голос
/ 07 марта 2012

У меня была такая же ситуация, но решение простое, если вы просто хотите посмотреть анимацию.Ваша программа связана с ani.save («dynamic_images.mp4»), который не нужен для самой анимации.Просто закомментируйте это.Ваш код вылетает из-за отсутствия установленного кодека (скорее всего).animation.py содержит код ниже.Если для кодека _make_movie в качестве аргумента задано None, используется ffmpeg (google it), тогда вам необходимо установить этот код и указать его в своем пути.В противном случае вы можете использовать mencoder, который также должен быть установлен и в пути.

def ffmpeg_cmd(self, fname, fps, codec, frame_prefix):
    # Returns the command line parameters for subprocess to use
    # ffmpeg to create a movie
    return ['ffmpeg', '-y', '-r', str(fps), '-b', '1800k', '-i',
        '%s%%04d.png' % frame_prefix, fname]

def mencoder_cmd(self, fname, fps, codec, frame_prefix):
    # Returns the command line parameters for subprocess to use
    # mencoder to create a movie
    return ['mencoder', 'mf://%s*.png' % frame_prefix, '-mf',
        'type=png:fps=%d' % fps, '-ovc', 'lavc', '-lavcopts',
        'vcodec=%s' % codec, '-oac', 'copy', '-o', fname]

def _make_movie(self, fname, fps, codec, frame_prefix, cmd_gen=None):
    # Uses subprocess to call the program for assembling frames into a
    # movie file.  *cmd_gen* is a callable that generates the sequence
    # of command line arguments from a few configuration options.
    from subprocess import Popen, PIPE
    if cmd_gen is None:
        cmd_gen = self.ffmpeg_cmd
    command = cmd_gen(fname, fps, codec, frame_prefix)
    verbose.report('Animation._make_movie running command: %s'%' '.join(command))
    proc = Popen(command, shell=False,
        stdout=PIPE, stderr=PIPE)
    proc.wait()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...