gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:19:56 25 4
gpt4 key购买 nike

到目前为止,为了让 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'

我找到了 this github gist关于安装ffmpeg。我使用了 chromium 源,并且安装时没有使用 prefix 选项(使用默认值)。

我已经确认安装了 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 <module>
writer.grab_frame()
File "/usr/local/lib/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), events, data)
File "/usr/local/lib/python3.7/selectors.py", 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 输出中)报告了对多个函数的 undefined reference 。在徒劳的追逐之后发现了这个:https://mailman.videolan.org/pipermail/x264-devel/2015-February/010971.html

为了修复 x264 安装,我只是添加了一些 configure 标志:

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

更新:

因此,在修复 libx264 问题后一切都安装正常。我继续将 ffmpeg 二进制文件从 ffmpeg_build 文件夹复制到 /usr/local/bin/ffmpeg

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

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

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

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

最佳答案

我在使用 Anaconda 时遇到了同样的问题。运行 which ffmpeg 显示它正在使用 Anaconda 路径内的 ffmpeg 而不是系统的二进制文件。我通过添加

解决了这个问题
plt.rcParams['animation.ffmpeg_path'] = '/usr/bin/ffmpeg'

在我的 matplotlib 导入之后。

关于python - 如何为 matplotlib.animation 正确启用 ffmpeg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42634997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com