【问题标题】:matplotlib animation movie: quality of movie decreasing with timematplotlib动画电影:电影质量随时间下降
【发布时间】:2018-07-26 15:09:01
【问题描述】:

我正在尝试使用 matplotlib 中的 animation.FuncAnimation 函数创建电影。这部电影在交互上看起来很好,但是当我用命令保存它时

anim2.save('somefilm.mp4',codec='mpeg4', fps=15)

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

我玩过 blitting,因为我认为这可能是因为画布没有重新绘制,但无济于事。提高比特率也无济于事。

设置dpi=500确实在一定程度上提高了电影的质量,但它会反复卡住,难以观看。

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

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

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

    你可以做四件事:

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

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

    • 更改编解码器(例如,改为codec="libx264"

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

    不幸的是,这些选项实际上取决于视频编解码器,即第三方程序(通常为ffmpeg)、视频的预期用途和平台。我会先添加 kwarg bitrate=-1 看看它是否有所改善。

    如果你不能让它工作,请添加一个完整的(但尽可能简单)的例子来说明如何创建一个坏文件。那就更容易调试了!

    【讨论】:

    • 非常感谢您的解释 - 我已经尝试在一定程度上对其进行测试,而 codec 是最大的不同(同时也减小了文件)。不知何故,它不适用于 QuickTime,但它与 vlc 完美运行。将bitrate=-1 设置为对我原来的行的唯一修改没有帮助,也没有只添加额外的参数。
    • 我将codec="libx264" 添加到我的animation.save 函数中以解决问题。 (Windows 10,ffmpeg)
    • 设置比特率 = -1 解决了我的问题。非常感谢
    【解决方案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=-1codec='libx264' 对我没有任何帮助。希望这会有所帮助!

    【讨论】:

    • 我最近想出的另一种方法是改用writer=animation.FFMpegFileWriter()。这会将每一帧保存到磁盘上,然后在最后将它们缝合在一起。问题在于,对于更复杂的动画,比特率需要设置得非常高(高达 5000+),这使得文件非常大(150Mb 用于 2 分钟的动画)。不适合分享!这种方法速度较慢,但​​存储效率更高,除非您真的想要,否则无需弄乱比特率。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多