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

mzz*_*zzx 15 python matplotlib

我正在尝试使用animation.FuncAnimationmatplotlib中的函数创建一部电影.电影看起来很精彩,但是当我用命令保存它时

anim2.save('somefilm.mp4',codec='mpeg4', fps=15)
Run Code Online (Sandbox Code Playgroud)

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

我玩弄blitting,因为我认为这可能是画布没有重绘的事实,但无济于事.提高比特率也无济于事.

设置dpi=500确实提高了电影的质量,虽然它反复卡住,这使得观看起来很困难.

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

DrV*_*DrV 16

为了深入研究这个问题,重要的是要理解视频文件通常使用高度有损压缩进行压缩,而交互式显示不会被压缩.对于图形来说,通常的电影压缩通常非常糟糕,这是压缩参数的问题.

你可以做四件事:

  • 设置图像分辨率(by dpi),但这可能实际上使输出视觉上更差,因为问题通常不在于缺少像素

  • 设置图像比特率(by bitrate); 您的比特率越高,您的电影就越好 - 一种可能性是设置bitrate=-1matplotlib选择最佳比特率

  • 改变编解码器(例如,到codec="libx264")

  • 给编解码器提供额外的参数(例如extra_args=['-pix_fmt', 'yuv420p'])

不幸的是,这些选项实际上取决于视频编解码器,它是第三方程序(通常ffmpeg),视频的预期用途以及您的平台.我首先要添加kwarg bitrate=-1以确定它是否能改进.

如果你无法使它工作,请添加一个完整的(但尽可能简单)如何创建一个坏文件的例子.然后它更容易调试!

  • 我在我的 animation.save 函数中添加了 `codec="libx264"` 来解决这个问题。(Windows 10,ffmpeg) (2认同)

Tay*_*lor 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)
Run Code Online (Sandbox Code Playgroud)

如果我将比特率设置为小于500的任何值,动画仍会变得模糊.bitrate=-1codec='libx264'没有做任何我.希望这可以帮助!