2014-05-25 7 views
5

मैं ffmpeg का उपयोग करके सहेजी गई एक साधारण एनीमेशन प्राप्त करने का प्रयास कर रहा हूं। मैंने ffmpeg स्थापित करने के लिए एक ट्यूटोरियल का पालन किया, और अब मैं इसे कमांड प्रॉम्प्ट से एक्सेस कर सकता हूं।matplotlib एनीमेशन को सहेज नहीं सकता

अब मैं कोड के इस टुकड़े चलाएँ:

import numpy as np 
from matplotlib import pyplot as plt 
from matplotlib import animation 

fig = plt.figure() 
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2)) 
line, = ax.plot([], [], lw=2) 

def init(): 
    line.set_data([], []) 
    return line, 

def animate(i): 
    x = np.linspace(0, 2, 1000) 
    y = np.sin(2 * np.pi * (x - 0.01 * i)) 
    line.set_data(x, y) 
    return line, 

anim = animation.FuncAnimation(fig, animate, init_func=init, 
           frames=200, interval=20, blit=True) 

mywriter = animation.FFMpegWriter() 
anim.save('mymovie.mp4',writer=mywriter) 

plt.show() 

मैं इस त्रुटि मिलती है: सिस्टम निर्दिष्ट फ़ाइल नहीं मिल सकता है:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 523, in runfile 
    execfile(filename, namespace) 
    File "C:\Users\Renger\.xy\startups\b.py", line 23, in <module> 
    anim.save('mymovie.mp4',writer=mywriter) 
    File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 609, in save 
    with writer.saving(self._fig, filename, dpi): 
    File "C:\Python27\lib\contextlib.py", line 17, in __enter__ 
    return self.gen.next() 
    File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 166, in saving 
    self.setup(*args) 
    File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 156, in setup 
    self._run() 
    File "C:\Python27\lib\site-packages\matplotlib\animation.py", line 183, in _run 
    stdin=subprocess.PIPE) 
    File "C:\Python27\lib\subprocess.py", line 711, in __init__ 
    errread, errwrite) 
    File "C:\Python27\lib\subprocess.py", line 948, in _execute_child 
    startupinfo) 
WindowsError: [Error 2] Het systeem kan het opgegeven bestand niet vinden 

पिछले डच वाक्य की तरह कुछ मतलब है।

इन त्रुटियों का क्या अर्थ है, और मैं उन्हें कैसे हल कर सकता हूं?

उत्तर

10

आप ffmpeg करने के लिए अपने पथ निर्दिष्ट करना होगा:

linux पर मैं का उपयोग करें:

import numpy as np 
from matplotlib import pyplot as plt 
from matplotlib import animation 
plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg' 

आप स्पष्ट रूप से करने के लिए अपने विंडोज़ के बजाय .exe बात करने के लिए होगा '/ usr/bin/ffmpeg'

आप ffmpeg स्थापित नहीं है, तो आप प्राप्त कर सकते हैं यह here

+0

पर साथ नहीं के साथ \ होना चाहिए पहले यह अभी भी इस तरह से काम नहीं किया, लेकिन यह पता चला कि मुझे हर जगह एक डबल स्लैश का उपयोग करना पड़ा। पता नहीं क्यों। – renger

+2

का उपयोग/स्लैश या कच्ची स्ट्रिंग का उपयोग r'C: ... \ \ अजगर में वर्णों से बच जाएगा। –

+1

'matplotlib.animation' आयात करने से पहले मुझे' आरसीपीराम 'सेट करना पड़ा। Matplotlib ('__version__ == '1.5.2'') में परिवर्तन या मेरे विंडोज़ इंस्टॉलेशन की विशिष्टताओं से संबंधित हो सकता है। – kazemakase

0

एनीमेशन.py में लाइन 183 subprocess.Popenffmpeg पर कॉल करें। ऐसा लगता है कि ffmpeg exe ​​वह जगह नहीं है जहां matplotlib यह अपेक्षा करता है।

मेरा पहला प्रयास विंडोज Path पर्यावरणीय चर में स्थापित पथ (निर्देशिका) को ffmpeg पर रखना होगा। मुझे लगता है कि एनीमेशन.py वैश्विक स्तर पर उपलब्ध होने की उम्मीद कर रहा है (क्योंकि यह लिनक्स के तहत होगा)।

यदि यह काम नहीं करता है, तो मैं यह देखने के लिए एनीमेशन.py में subprocess.Popen कॉल का निरीक्षण करता हूं कि यह वास्तव में क्या कर रहा है। आप इसेफ़ाइल में इसे थूकने के लिए इसे तोड़ सकते हैं या verbose.report चर समायोजित कर सकते हैं। लाइन 179 है:

verbose.report('MovieWriter.run: running command: %s' % 
        ' '.join(command)) 
5

कुछ एनीमेशन "anim के लिए" मैं खिड़कियों पर का उपयोग करें:

plt.rcParams['animation.ffmpeg_path'] ='E:\\Media\\ffmpeg\\bin\\ffmpeg.exe' 
FFwriter = animation.FFMpegWriter() 
anim.save('basic_animation.mp4', writer = FFwriter, fps=30) 

जहां पथ \ और/या \ फ़ोल्डरों के बीच

+1

कोड-केवल उत्तर कम गुणवत्ता वाले ऑटो-फ्लैग किए गए हैं और जैसे स्टैक ओवरफ्लो पर निराश हैं। भविष्य में कृपया विवरण के साथ अपना उत्तर सुशोभित करें और समझाएं कि यह प्रश्न का समाधान क्यों है। –

+0

यह पूरी तरह से मेरी समस्या हल हो गया। धन्यवाद! – sfortney

संबंधित मुद्दे