您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 如何为matplotlib.animation正确启用ffmpeg?

5b51 2022/1/14 8:21:49 python 字数 7698 阅读 521 来源 www.jb51.cc/python

到目前为止,我已经在堆栈上覆盖了大量的内容,试图让ffmpeg继续下去,这样我就可以制作一个间隔拍摄视频.我在CentOS 7机器上,运行python3.7.0a0.python3 >>> import numpy as np >>> np.__version__ '1.12.0' >>> import

概述

到目前为止,我已经在堆栈上覆盖了大量的内容,试图让ffmpeg继续下去,这样我就可以制作一个间隔拍摄视频.

我在CentOS 7机器上,运行python3.7.0a0.

python3
>>> import numpy as np
>>> np.__version__
'1.12.0'
>>> import matplotlib as mpl
>>> mpl.__version__
'2.0.0'
>>> import mpl_toolkits.basemap as base
>>> base.__version__
'1.0.7'

我在安装ffmpeg时找到了this github gist.我使用了铬源,并且没有使用前缀选项安装(使用认值).

我已经确认安装了ffmpeg,虽然我不知道测试它是否有效.

which ffmpeg
/usr/local/bin/ffmpeg

ffmpeg -version
ffmpeg version N-83533-gada281d Copyright (c) 2000-2017 the FFmpeg dev elopers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11
configuration:
libavutil      55. 47.100 / 55. 47.100
libavcodec     57. 80.100 / 57. 80.100
libavformat    57. 66.102 / 57. 66.102
libavdevice    57.  2.100 / 57.  2.100
libavfilter     6. 73.100 /  6. 73.100
libswscale      4.  3.101 /  4.  3.101
libswresample   2.  4.100 /  2.  4.100

我尝试运行一些我在网上找到的示例:

[1] http://matplotlib.org/examples/animation/basic_example_writer.html

[2] https://stackoverflow.com/a/23098090/3454650

一切正常,直到我尝试保存动画文件.

[1]

 anim.save('basic_animation.mp4',writer = FFwriter,fps=30,extra_args=['-vcodec','libx264'])

[2]

im_ani.save('im.mp4',writer=writer)

我发现here明确地设置ffmpeg的路径可能是必要的,所以我将它添加到测试脚本的顶部:

plt.rcParams['animation.ffmpeg_path'] = '/usr/local/bin/ffmpeg'

我在代码中尝试了一些调整,但总是得到相同的响应,我不知道如何开始解密:

Traceback (most recent call last):
  File "testanim.py",line 27,in 
  
   python3.7/contextlib.py",line 100,in __exit__
    self.gen.throw(type,value,traceback)
  File "/usr/local/lib/
   python3.7/site-packages/matplotlib/animation.py",line 256,in saving
    self.finish()
  File "/usr/local/lib/
   python3.7/site-packages/matplotlib/animation.py",line 276,in finish
    self.cleanup()
  File "/usr/local/lib/
   python3.7/site-packages/matplotlib/animation.py",line 311,in cleanup
    out,err = self._proc.communicate()
  File "/usr/local/lib/
   python3.7/subprocess.py",line 836,in communicate
    stdout,stderr = self._communicate(input,endtime,timeout)
  File "/usr/local/lib/
   python3.7/subprocess.py",line 1474,in _communicate
    selector.register(self.stdout,selectors.EVENT_READ)
  File "/usr/local/lib/
   python3.7/selectors.py",line 351,in register
    key = 
   super().register(fileobj,events,data)
  File "/usr/local/lib/
   python3.7/selectors.py",line 237,in register
    key = SelectorKey(fileobj,self._fileobj_lookup(fileobj),line 224,in _fileobj_lookup
    return _fileobj_to_fd(fileobj)
  File "/usr/local/lib/
   python3.7/selectors.py",line 39,in _fileobj_to_fd
    "{!r}".format(fileobj)) from None
ValueError: Invalid file object: <_io.BufferedReader name=6>

  

我的配置是否存在格式错误内容?我搜索谷歌这个错误已经有一段时间了,但从未找到任何与动画/ ffmpeg相关的内容.任何帮助将不胜感激.

更新:

@LordNeckBeard在这里指出我:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos

我遇到了安装x264编码依赖项的问题. libavcodec / * .c中的一些文件(在make输出中)报告了对几个函数的未定义引用.经过一场野鹅追逐后发现:https://mailman.videolan.org/pipermail/x264-devel/2015-February/010971.html

要修复x264安装,我只需添加一些配置标志:

./configure --enable-static --enable-shared --extra-ldflags="-lswresample -llzma"

更新:

所以在修复libx264问题后一切安装正常.我继续将ffmpeg_build文件夹中的ffmpeg二进制文件复制到/usr/local/bin / ffmpeg中.

运行脚本后,我遇到了ffmpeg无法找到libx264共享对象的问题.我想我将不得不使用不同的前缀重新编译所有内容.我的直觉告诉我,在我搞乱了所有东西之后,有一些旧文件存在,使用了一些破坏的配置.

所以我决定也许我应该尝试使用NUX:http://linoxide.com/linux-how-to/install-ffmpeg-centos-7/
我使用新的rpm安装了ffmpeg,但无济于事.由于缺少共享对象,我仍然无法运行ffmpeg.

最后,我没有将usiong文件复制到我的/usr/local/bin文件夹中,而是直接从build bin目录运行ffmpeg.事实证明这确实有效!

所以从本质上讲,如果我想在系统范围内安装ffmpeg,我需要再次从源手动编译,但使用非本地前缀.

或者,使用上面提到的配置选项compile ffmpeg.


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶