ffmpegを取得しようとしていて、今までスタックで多くの問題をカバーしていましたので、タイムラプスビデオを作成できます。matplotlib.animationで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が見つかりました。クロムソースを使用し、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)
を私は明示的ffmpegのパスを設定する必要があるかもしれないhereを発見したので、私は、テストスクリプトの上部にこれを追加しました:
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>
私の設定が不正な形式ですか?私はしばらくの間このエラーのためのGoogleを捜したが、アニメーション/ ffmpegに関連するものは決して見つけられなかった。どんな助けでも大歓迎です。
UPDATE:
@LordNeckBeardはここに私を指摘:私はx264のエンコードの依存関係をインストールすると問題に走ったhttps://trac.ffmpeg.org/wiki/CompilationGuide/Centos
。いくつかのlibavcodec/*。c(make
出力)のファイルは、いくつかの関数への未定義の参照を報告していました。野生のガチョウの追跡は、この発見後:https://mailman.videolan.org/pipermail/x264-devel/2015-February/010971.html
x264のインストールを修正するには、私は単にいくつかのconfigure
フラグを追加しました:
./configure --enable-static --enable-shared --extra-ldflags="-lswresample -llzma"
UPDATE:
だからすべてがlibx264を固定した後罰金インストール問題。私は先に進み、ffmpegバイナリをffmpeg_build
フォルダから
/usr/local/bin/ffmpeg
にコピーしました。
スクリプトを実行した後、ffmpegがlibx264共有オブジェクトを見つけられなかった問題が発生しました。私は別の接頭辞を使ってすべてを再コンパイルする必要があると思う。私の直感は、壊れているいくつかの設定を使って、すべてを混乱させた後に古いファイルがあることを私に伝えます。
NUXを使ってみるといいかもしれません。http://linoxide.com/linux-how-to/install-ffmpeg-centos-7/ ffmpegは新しいrpmを使ってインストールしましたが、役に立たないと思います。私はまだ共有オブジェクトがないためにffmpegを実行できませんでした。
最後に、私の/usr/local/bin
フォルダにコピーされたusiongファイルの代わりに、ビルドbinディレクトリから直接ffmpegを実行しました。これは正しく動作することがわかります!
本質的には、ffmpegシステム全体をインストールする場合は、ソースから再度コンパイルする必要がありますが、ローカル以外のプレフィックスを使用する必要があります。
私は、あなたが提供した出力に 'ffmpeg'という特定の情報を見ません。しかし、あなたはlibx264を使用しようとしていますが、ffmpeg configureにこのエンコーダでエンコードを有効にするために必要な '--enable-gpl --enable-libx264'がありません。 libx264をサポートしている 'ffmpeg'バイナリを(ダウンロードして)(https://johnvansickle.com/ffmpeg/)ダウンロードできます。 – LordNeckbeard
私は、出力がffmpegとは何の関係もないので混乱していました。しかしバイナリへのリンクをありがとうございました。私はちょうどそれにリンクしようとしたと実際に動作します! 明日ffmpegを上記のフラグで再コンパイルしようとします。失敗した場合、ここで報告してください。助けてくれてありがとう! – spanishgum