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=-1并matplotlib选择最佳比特率
改变编解码器(例如,到codec="libx264")
给编解码器提供额外的参数(例如extra_args=['-pix_fmt', 'yuv420p'])
不幸的是,这些选项实际上取决于视频编解码器,它是第三方程序(通常ffmpeg),视频的预期用途以及您的平台.我首先要添加kwarg bitrate=-1以确定它是否能改进.
如果你无法使它工作,请添加一个完整的(但尽可能简单)如何创建一个坏文件的例子.然后它更容易调试!
我在底图上动画〜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=-1并codec='libx264'没有做任何我.希望这可以帮助!