python animation save_python – 保存Matplotlib动画

博主在尝试用Python的matplotlib库制作并保存wave包的动画到 MovWave.mp4 文件时遇到问题。首先遇到了 'list index out of range' 错误,这通常是由于没有可用的视频写入器导致的。在更新ffmpeg并尝试使用Python 2.7和3.3后,虽然能生成mpeg文件,但文件无法播放,大小仅有几百kB。代码中定义了FFT函数、FUNCTION函数,并设置了一些参数,用于创建波包动画。最后,通过animation.ArtistAnimation保存动画,但在保存过程中出现问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试制作wave包的动画并将其另存为电影.除了储蓄之外的一切都在起作用.你能告诉我我做错了什么吗?当进入ani.save(‘MovWave.mp4’)时,他告诉我:

writer = writers.list()[0]

IndexError: list index out of range

我当然试着谷歌搜索,但我甚至不知道这意味着什么.

更新:我现在可以在控制台中调用ffmpeg.它说我有ffmpeg版本0.10.7-6:0.10.7-0jon1~精确安装.我更新了代码并运行了程序,但现在我收到以下错误:

Traceback (most recent call last):

ani.save('MovWave.mpeg', writer="ffmpeg")

writer.grab_frame()

dpi=self.dpi)

self.canvas.print_figure(*args, **kwargs)

self.figure.dpi = origDPI

self.dpi_scale_trans.clear().scale(dpi, dpi)

self._mtx = np.identity(3)

from numpy import eye

File "", line 1609, in _handle_fromlist

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

更新2:显然在使用python 3.3时有一个bug,正如doctorlove指出的那样.我现在正在尝试使用python 2.7.现在它创建了一个mpeg文件,但它无法播放,只有约150 kB大.

更新3:好的,所以我在Win7机器上尝试了完全相同的代码,它也适用于python 3.3.但我有同样的问题,我之前使用的是python 2.7.创建的mpeg文件无法播放,只有几百kB.

#! coding=utf-8

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

import time

time.clock()

def FFT(x,y):

X = (x[-1]-x[0])/len(y)

f = np.linspace(-2*np.pi/X/2,2*np.pi/X/2,len(y))

F = np.fft.fftshift(np.fft.fft(y))/np.sqrt(len(y))

return(f,F)

def FUNCTION(k_0,dx,c,t):

y = np.exp(1j*k_0*(x-c*t))*np.exp(-((x-c*t)/(2*dx))**2 )*(2/np.pi/dx**2)**(1/4)

k,F = FFT((x-c*t),y)

return(x,y,k,F)

#Parameter

N = 1000

x = np.linspace(0,30,N)

k_0 = 5

dx = 1

c = 1

l = [k_0,c,dx]

fig = plt.figure("Moving Wavepackage and it's FFT")

sub1 = plt.subplot(211)

sub2 = plt.subplot(212)

sub2.set_xlim([-10,10])

sub1.set_title("Moving Wavepackage and it's FFT")

sub1.set_ylabel("$Re[\psi(x,t)]$")

sub1.set_xlabel("$t$")

sub2.set_ylabel("$Re[\psi(k_x,t)]$")

sub2.set_xlabel("$k_x$")

n = 50

t = np.linspace(0,30,n)

img = []

for i in range(n):

x,y,k,F = FUNCTION(k_0,dx,c,t[i])

img.append(plt.plot(x,np.real(y),color="red", axes=plt.subplot(211)))

img.append(plt.plot(k,np.real(F),color="red", axes=plt.subplot(212)))

ani = animation.ArtistAnimation(fig, img, interval=20, blit=True, repeat_delay=0)

ani.save('MovWave.mpeg', writer="ffmpeg")

print(time.clock())

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值