matplotlib动画电影:电影质量随时间下降

时间:2014-08-08 12:15:58

标签: python matplotlib

我正在尝试使用matplotlib中的animation.FuncAnimation函数创建一部电影。电影看起来很漂亮,但是当我用命令

保存它时
anim2.save('somefilm.mp4',codec='mpeg4', fps=15)

它开始很好,但后来变得模糊(使用QuickTime和vlc,所以我认为它是电影,而不是播放器。)

我已经玩过 blitting ,因为我认为这可能是帆布没有重新绘制的事实,但无济于事。提高比特率也没有帮助。

设置dpi=500确实可以在一定程度上改善电影的质量,但它会反复卡住,这使得观看起来很困难。

我只是想知道这是否是最好的,或者我错过了什么?

2 个答案:

答案 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=-1codec='libx264'对我没有任何帮助。希望这有帮助!