Reputation: 789
I want to animate some plots with matplotlib. The version I have is the Enthough Canopy distribution (Version: 1.1.0.1371), running in a mac os x 10.8 (Mountain Lion). I have used the FuncAnimation routine from the animation package of matplotlib. My problem comes saving the animation. I want to save in mp4 format:
anim.save('test.mp4',fps=30)
The error I get is:
UserWarning: MovieWriter ffmpeg unavailable
warnings.warn("MovieWriter %s unavailable" % writer)
So I installed ffmpeg via Macports. But I am still having the same error. Do you know how to setup matplotlib in order to recognise ffmpeg? Do I have to change the matplotlibrc file? Thanks.
EDIT: I have realized that I can manually put '/opt/local/bin' in the PYTHONPATH, but it does not change the PATH in Enthough Canopy. Do anyone know how to change the PATH in canopy?
Upvotes: 12
Views: 11844
Reputation: 490
If you are agnostic to the movie file type, you could use the Python cv2
library to write .avi movie files from a folder of the images you wish to combine into a movie. Here's an example:
import cv2
# Create avi movie from static plots created of each time slice
image_folder = 'path_to_png_files'
video_name = '/mov-{}.avi'.format('optional label')
# Store individual frames into list
images = [img for img in os.listdir(image_folder) if img.endswith(".png")]
# Create frame dimension and store its shape dimensions
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape
# cv2's VideoWriter object will create a frame
video = cv2.VideoWriter(avi_path + video_name, 0, 1, (width,height))
# Create the video from individual images using for loop
for image in images:
video.write(cv2.imread(os.path.join(image_folder, image)))
# Close all the frames
cv2.destroyAllWindows()
# Release the video write object
video.release()
Upvotes: 0
Reputation: 25373
I had success when installing with homebrew:
brew install ffmpeg
After that set up the FFMpegWriter yourself by:
mywriter = animation.FFMpegWriter()
anim.save('mymovie.mp4',writer=mywriter)
Upvotes: 4
Reputation: 394
I had the same problem. My solution was very simple.
Download the binary from here.
Then do
sudo mv ~/Downloads/ffmpeg /usr/bin/
Upvotes: 7
Reputation: 22701
I think the solution can be found in the workaround in this and this post.
It seems that the path of the shell is not loaded by matplotlib, and since macports are installed in /opt/local/bin
, ffmpeg
can't be found.
Either go for the hack described above, try making a symlink in /bin
for ffmpeg
, or try adding the path to ffmpeg
to the python path as suggested in the comments of the second link
Upvotes: 2