#####変更
- 20180518 題材をライフゲーム(未完)から波形に変えました。
- 20180521 シンタックスハイライトを追加
###問題
- Jupyter notebook上Juliaで波形を書いた。
- Plots.jlとGR.jlをつかって描画し、gif動画に出力しようとした。
using Plots
gr()
x = linspace(0, 2π,50)
anim = @animate for i in x[2:end]
plot(x, [sin.(x - i),cos.(x-i)],seriestype=:scatter)
end
gif(anim,"/tmp/三角関数.gif",fps=15)
以上のコードを実行したところ、以下のようなエラーが出ました。
could not spawn `ffmpeg -v 0 -i 'C:\Users\(ユーザー名)\AppData\Local\Temp\jl_5421.tmp/%06d.png' -vf palettegen=stats_mode=diff -y 'C:\Users\(ユーザー名)\AppData\Local\Temp\jl_5421.tmp/palette.bmp'`: no such file or directory (ENOENT)
###ffmpegの導入
どうやら動画作成にはffmpegというのが必要らしい。そこで
- ffmpegのページからffmpeg-4.0.tar.bz2をダウンロードして解凍した。
- 解凍されたフォルダの名前をffmpegに変えてC:\Program Files内に移動させた。
- システム環境変数のPathを編集、値C:\Program Files\ffmpeg\binを新規追加した。
ffmpeg追加後、もう一度同じコードを実行したところ以下のようなエラーが出ました。
failed process: Process(`ffmpeg -v 0 -framerate 2 -loop 0 -i 'C:\Users\(ユーザー名)\AppData\Local\Temp\jl_B822.tmp/%06d.png' -i 'C:\Users\(ユーザー名)\AppData\Local\Temp\jl_B822.tmp/palette.bmp' -lavfi paletteuse=dither=sierra2_4a -y '\tmp\三角関数.gif'`, ProcessExited(1)) [1]
###パッケージのアップデート
このエラーメッセージを調べたところ似たようなところではまってる方がいらっしゃいました。
https://github.com/JuliaPlots/Plots.jl/issues/1239
この方曰くPlots.jl/animation.jlのpngエンコーダのバグがこのエラーの原因らしいということです。ありがたいことにこの方は修正案を提出し、提出案はマージされています。ということは、最新バージョンのPlots.jlにアップデートすればいいのではないかと考えました。
julia>Pkg.update()
(前略)
INFO: Upgrading BinDeps: v0.8.7 => v0.8.8
(中略)
INFO: Upgrading GR: v0.26.0 => v0.31.0
(中略)
INFO: Upgrading IJulia: v1.7.0 => v1.8.0
(中略)
INFO: Upgrading Plots: v0.15.0 => v0.17.0
(後略)
でも、やっぱり同じエラーが出ました。
failed process: Process(`ffmpeg -v 0 -framerate 2 -loop 0 -i 'C:\Users\(ユーザー名)\AppData\Local\Temp\jl_CF8A.tmp/%06d.png' -i 'C:\Users\(ユーザー名)\AppData\Local\Temp\jl_CF8A.tmp/palette.bmp' -lavfi paletteuse=dither=sierra2_4a -y '\tmp\三角関数.gif'`, ProcessExited(1)) [1]
###出力先の修正
作業しているnotebookの保存先にtmpフォルダを新規作成し、出力ディレクトリを"/tmp/三角関数.gif"から"tmp/三角関数.gif"に変えたらうまくいきました。
using Plots
gr()
x = linspace(0,2π,50)
anim = @animate for i in x[2:end]
plot(x,[sin.(x-i),cos.(x-i)],seriestype=:scatter)
end
gif(anim, "tmp/三角関数.gif", fps = 15) #"/tmp/三角関数.gif"->"tmp/三角関数.gif"
振り返ると、failed processエラーは、出力ディレクトリ名を正しく書いていなかったことが原因で、Plots.jlのバグは関係なかったのかもしれません。
もしそうならば、ffmpegをインストールしてPathを通した段階で首尾よくGIF動画出力できるのかもしれません。
この問題を書こうと思ったのは、最近同じ問題を別の方法で解消されていた方を見かけたからです。
#Julia言語 Julia+Plotsでのアニメ作成に格闘していましたが、なんとかできました。「ERROR: LoadError: could not spawn `ffmpeg」云々のエラーメッセージがWindows 7,10の環境で出ていましたが、解消できました。
— にょい (@nyoikinkobou) 2018年5月9日
Pkg.add("ImageMagick")
Pkg.build("ImageMagick")
して
using ImageMagick
を書き加えれば動画出力できるみたいです。
###参考文献
http://docs.juliaplots.org/latest/animations/
https://qiita.com/Urad/items/f489a5aa826ecb2087d1