OpenSCAD でアニメーションを作成 -> 連番PNG -> ffmpeg で apng/mp4(h.264) にする方法のメモ
1. OpenSCAD でアニメーションを作る
use <../../../utility/color/HSL.scad> $fn = 6; for ( L = [ 0 : 1 / 6: 1 ] ) for ( S = [ 0 : 1 / 5: 1 ] ) for ( H = [ 0 : 30 : S > 0 ? 360 - 1 : 0 ] ) translate( [ S * cos( H ), S * sin( H ), L - 0.5 ] ) color( to_RGB_from_HSL( [ H, S, L ] ) ) rotate( [ $t * 720, 0, $t * 360 ] ) // 👈 ここの $t スペシャル変数がアニメーション用 scale( 1 - S ) cylinder( d = 0.1, h = 0.075, center = true );
ふつーに .scad を書いて、アニメーションを $t
(sec) で導入するだけでした。かんたん。
2. OpenSCAD でアニメーションをプレビュー&連番PNG出力する
OpenSCAD でアニメーションをプレビューしたい場合は:
- ↑ View -> Animate を on 状態にする
- ↑ プレビューとコンソールの間にアニメーション設定が出現するので
FPS
とSteps
を設定 (Time
はFPS
とSteps
を設定すると自動的に回りはじめます。この値がソースの$t
へ入りアニメーションします)
この状態で Export / PNG すると連番PNGが出てきそうな予感がしますが、 Export / PNG しても Export / PNG した瞬間の $t
の1枚だけが出力されます。そうじゃない動作になります。
- ↑
Dump Pictures
を on にします
Dump Pictures
を on にするとプレビューのアニメーションのフレームが描画されると同時に frame00000.png
, frame00001.png
, ... の連番PNGがしれっと .scad と同じディレクトリーへ出力され始めます。 OpenSCAD に設定した FPS
と Steps
を構成するすべての Time
の .png の出力が終わると Dump Pictures
のチェックが自動的に外れます。
3. 連番 PNG を ffmpeg で apng / mp4 へ変換する
ffmepg の他にも手段はたくさんあります。ウェブアプリで連番画像から apng を作れる EZGIF.COM/APNG maker もあります。しかし、 OpenSCAD を実用できる状態でおそらく手元にあるであろう PC に比べると手間と時間がかかります。Windows用のアプリとかいろいろあるみたいですが、今回のメモの作成では汎用性と可搬性がとても高い ffmpeg を WSL の Arch 環境から使いました。
# frame00000.png, frame00001.png, ... から apng ( animation png ) を ffmpeg で作成 ffmpeg -framerate 24 -i frame%05d.png -r 60 -plays 0 out.apng
# frame00000.png, frame00001.png, ... から mp4 ( h.264 ) を ffmpeg で作成 ffmpeg -framerate 24 -i frame%05d.png -r 60 -pix_fmt yuv420p -vcodec h264 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" out.mp4
連番 .png --/ffmpeg/--> .apng --/ffmpeg/--> .mp4 ( h.264 ) も可能。(今回はわざわざそのルートで逐次変換する必要はないので .apng も .mp4 も直接生成)
ちなみに、 Twitter も Facebook も apng は投稿してもアニメーション削除されます。悲しい。😥
Imgur だと apng 期待動作のまま置いて貰えます。嬉しい。😃
↑ imgur に置いた画像を markdown で直接参照しています。
はてなブログ(はてなフォトライフ)は Twitter, Facebook と同様でアニメーション勝手に削除されます。悲しい😥