我正在尝试使用matplotlib中的animation.FuncAnimation
函数创建一部电影。电影看起来很漂亮,但是当我用命令
anim2.save('somefilm.mp4',codec='mpeg4', fps=15)
它开始很好,但后来变得模糊(使用QuickTime和vlc,所以我认为它是电影,而不是播放器。)
我已经玩过 blitting ,因为我认为这可能是帆布没有重新绘制的事实,但无济于事。提高比特率也没有帮助。
设置dpi=500
确实可以在一定程度上改善电影的质量,但它会反复卡住,这使得观看起来很困难。
我只是想知道这是否是最好的,或者我错过了什么?
答案 0 :(得分:16)
为了深入研究这个问题,重要的是要理解视频文件通常使用高度有损压缩进行压缩,而交互式显示不会被压缩。对于图形来说,通常的电影压缩通常非常糟糕,而且这是压缩参数的问题。
您可以做四件事:
设置图像分辨率(dpi
),但这实际上可能会使输出视觉上更差,因为问题通常不在于缺少像素
设置图像比特率(bitrate
);您的比特率越高,您的电影就越好 - 一种可能是设置bitrate=-1
并让matplotlib
选择最佳比特率
更改编解码器(例如,更改为codec="libx264"
)
为编解码器提供额外的参数(例如,extra_args=['-pix_fmt', 'yuv420p']
)
不幸的是,这些选项实际上取决于视频编解码器,它是第三方程序(通常为ffmpeg
),视频的预期用途以及您的平台。我首先要添加kwarg bitrate=-1
,看看它是否有所改善。
如果无法使其正常工作,请添加完整(但尽可能简单)的示例,了解如何创建错误文件。然后它更容易调试!
答案 1 :(得分:9)
我在底图上为一些地下水流向量设置~3500帧动画时遇到了同样的问题,最后修复了问题。我一直试图在anim.save
声明中设置比特率,但在动画后期仍然会得到相同的模糊度。我必须做的是在定义编写器时设置比特率:
plt.rcParams['animation.ffmpeg_path']='C:/ffmpeg/bin/ffmpeg.exe'
writer=animation.FFMpegWriter(bitrate=500)
anim.save('T:/baysestuaries/USERS/TSansom/Tiltmeters/testdeployment/tilt2.mp4',
writer=writer,fps=8)
如果我将比特率设置为小于500的任何值,动画仍会变得模糊。 bitrate=-1
和codec='libx264'
对我没有任何帮助。希望这有帮助!