matplotlib 动画电影:电影质量随时间下降
我正在尝试使用 animation.FuncAnimation
函数在 matplotlib 中制作一个动画电影。这个动画在互动时看起来很好,但当我用以下命令保存它时
anim2.save('somefilm.mp4',codec='mpeg4', fps=15)
开始的时候还不错,但之后就变得模糊了(无论是用 QuickTime 还是 vlc 播放,所以我觉得问题出在电影本身,而不是播放器)。
我尝试过使用 blitting,因为我觉得可能是画布没有重新绘制,但没有效果。增加比特率也没有帮助。
设置 dpi=500
确实改善了电影的质量,但这样一来,播放时就会反复卡顿,这让观看变得困难。
我只是想知道,这是不是能做到的最好效果,还是我漏掉了什么?
2 个回答
我之前在给大约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'
对我来说都没用。希望这能帮到你!
要深入了解这个问题,首先要明白视频文件通常是经过高度有损压缩的,而互动显示则没有压缩。常见的电影压缩方式在处理图形时往往效果很差,这主要与压缩参数有关。
你可以尝试以下四种方法:
设置图像分辨率(通过
dpi
),但这可能会让输出的视觉效果更差,因为问题通常不在于像素不足。设置图像比特率(通过
bitrate
);比特率越高,视频质量就越好。你可以尝试设置bitrate=-1
,让matplotlib
自动选择最佳比特率。更改编码格式(例如,使用
codec="libx264"
)。给编码器添加额外参数(例如,
extra_args=['-pix_fmt', 'yuv420p']
)。
不过,这些选项实际上依赖于视频编码器,这通常是一个第三方程序(一般是 ffmpeg
),还取决于你的视频用途和平台。我建议你先试试添加参数 bitrate=-1
,看看是否能改善情况。
如果你还是无法解决问题,请提供一个完整的(但尽量简单)示例,说明如何创建一个效果不好的文件。这样更容易找到问题所在!