Hello I just finished to write a code that compute the orbitals of the hydrogen atom. I wrote a for loop to create 300 pictures using the command
plt.savefig("image{i}.png".format(i=i))
Now I wanted to ask what is the easiest way to create a high quality .mp4 or .gif file out of the pictures using python. I saw several tutorials that didn't helped me because the gif was messed up or the quality was too low.
Thank you for your support
The easiest I know is to use imageio
's mimwrite
.
import imageio
ims = [imageio.imread(f) for f in list_of_im_paths]
imageio.mimwrite(path_to_save_gif, ims)
There are obvious options such as duration, number of loops, etc.
And some other options you can read about in the documentation by using imageio.help('gif')
.
Hope that helps.
The faster way is to use imageio
as in @ShlomiF's answer, but you can do the same thing with pure matplotlib if you so prefer:
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
nframes = 25
plt.subplots_adjust(top=1, bottom=0, left=0, right=1)
def animate(i):
im = plt.imread('image'+str(i)+'.png')
plt.imshow(im)
anim = FuncAnimation(plt.gcf(), animate, frames=nframes,
interval=(2000.0/nframes))
anim.save('output.gif', writer='imagemagick')
But if your first priority is the quality of the output you may want to consider using ffmpeg
and convert
directly,
ffmpeg -f image2 -i image%d.png output.mp4
ffmpeg -i output.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v pam -f \
image2pipe - | convert -delay 10 - -loop 0 -layers optimize output.gif
Changing the scale
argument as needed to control the size of the final output, scale=-1:-1
leaves the size unchanged.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With