アニメーション作成方法
履歴
- 2016-07-05 高橋芳幸 新規作成
- 2018-07-30 高橋芳幸 更新
- 2018-08-17 高橋芳幸 更新
スクリプト
複数ページの pdf ファイルを png ファイルに分割するスクリプトの例はこちら.
png ファイルからのアニメーション作成
例
$ ffmpeg -i figs/dcl_%06d.png -qscale 0 out.avi
or
$ avconv -i figs/dcl_%06d.png -qscale 0 out.avi
see also <URL:make_anim_okazakis>.
複数ページを含む pdf ファイルからのアニメーション作成
pdftk, pstoimg, ffmpeg を使用. (pstoimg の代わりに convert でも良い.) debian であれば, これらソフトウェアを使うにはそれぞれ pdftk, latex2html, ffmpeg パッケージをインストールすればよい.
$ mkdir figs-pdf figs-png $ pdftk dcl.pdf cat 000001 output figs-pdf/dcl_000001.pdf $ pstoimg -density 144 -flip r270 figs-pdf/dcl_000001.pdf -out figs-png/dcl_000001.png $ pdftk dcl.pdf cat 000002 output figs-pdf/dcl_000002.pdf $ pstoimg -density 144 -flip r270 figs-pdf/dcl_000002.pdf -out figs-png/dcl_000002.png ... $ ffmpeg -i figs-png/dcl_%06d.png -qscale 0 out.avi
複数ページの pdf ファイルを png ファイルに分割するスクリプトの例はこちら.
ffmpeg のオプションについては, こちらを参照のこと.
debian での avi ファイルの再生には vlc パッケージをインストールすると良さそう.
動画の合成 (小窓に合成)
解像度などの情報取得
コマンド
$ ffmpeg -i input.mp4
動画の不要部分を切る
コマンド
$ ffmpeg -ss 0 -i combined_take7.mp4 -to 50.5 combined_take7_cut.mp4
-ss 0 は冒頭 0 秒を切断, -to 50.5 はそこから 50.5 秒間で切断.
- 参考
- https://qiita.com/kitar/items/c4da996e358e39aa7c9b
サイズ変更
コマンド
$ ffmpeg -i in.mp4 -vf scale=1280:-1 out.mp4
動画の横幅(width)を 1280 にする. 高さ(height)は アスペクト比を維持して自動で設定する. -1:760 とすると高さを指定する
余計な部分をクリップ
コマンド
$ ffmpeg -ss 1.5 -i input.mp4 -to 50 output.mp4
最初の 1.5 秒から 50 秒分だけ切り出して保存
二つの動画を合成 (小窓に入れる)
コマンド
$ ffmpeg -i parent.mp4 -vf "movie=child.mp4[inner]; [in][inner] overlay=910:440 [out]" combined.mp4
- 上の例では parent.mp4 が「親動画」. child.mp4 が「小窓動画」
- overlay は小窓を入れる位置. おそらく 910 が左からの距離. 440 が上からの距離.
- 例 (要パスワード)
- 参考
- https://qiita.com/riversun/items/d09d8e596a20ec1798f3
解像度変更 (もらった情報, 未確認)
コマンド
$ ffmpeg -i input -s 1280x720 out.mp4
1280x720に縮小。元の解像度だと1分100MBで過大です。
ゲインの調整 (もらった情報, 未確認)
コマンド
$ ffmpeg -i input -vn -af volumedetect -f null -
で音声のレベルを確認、max_volume が -14.3 db だったので0になるように ffmpeg -i input -af volume=10dB output (14.3にするつもりが間違って10になっていますが) 余計な部分を捨てること出来るので、録画ボタンを押したあとおもむろに開始すれば大丈夫です。
左右に並べる
単に左右に並べる
$ ffmpeg -i warm-bubble_hevi.avi -i warm-bubble_hevi.avi -filter_complex hstack out.avi
- 左右に並べる方法の参考ページ
- https://gist.github.com/0x0c/148c33ede66b074e0a05b4901c3e06fe
- https://qiita.com/kuboyoo/items/33054e1ebb8b30d40766
左右に 3 つ並べる
$ ffmpeg \ -i movie1.avi \ -i movie2.avi \ -i movie3.avi \ -filter_complex "[0:v][1:v][2:v]hstack=inputs=3[v]" -map "[v]" \ movie_all.avi
- 左右に 3 つ並べる方法の参考ページ
トリミングして左右に並べる
左の動画の右端を切って, 右の動画の左端を切って並べる. (
$ ffmpeg -i warm-bubble_hevi.avi -vf crop=in_w-200:in_h:0:0 hevi_crop.avi $ ffmpeg -i warm-bubble_heve.avi -vf crop=in_w-100:in_h:100:0 heve_crop.avi $ ffmpeg -i hevi_crop.avi -i heve_crop.avi -filter_complex hstack out_crop.avi
- トリミングの参考ページ
- https://w.atwiki.jp/kobapan/pages/173.html
タイル状に並べる (サイズ指定)
2x2
$ ffmpeg \ -i movie11.avi \ -i movie12.avi \ -i movie21.avi \ -i movie22.avi \ -filter_complex \ "[0:v][1:v]hstack=inputs=2[top];[2:v][3:v]hstack=inputs=2[bottom];[top][bottom]vstack=inputs=2[v]" \ -map "[v]" \ movie_all.avi
2x2 (最後は白抜き)
$ ffmpeg \ -i movie11.avi \ -i movie12.avi \ -i movie21.avi \ -filter_complex \ "color=white:2100x1484[c];[0:v][1:v]hstack=inputs=2[top];[2:v][c]hstack=inputs=2:shortest=1[bottom];[top][bottom]vstack=inputs=2[v]" \ -map "[v]" \ movie_all.avi
ただし, 2100x1484 は入力動画のサイズ.
- 参考ページ (白抜きパネルの参考ページ)
タイル状に並べる (サイズ指定)
2x2
anim1.avi, anim2.avi, anim3.avi, anim4.avi を 2x2 に並べる.
$ ffmpeg -i anim1.avi -i anim2.avi -i anim3.avi -i anim4.avi \ -filter_complex " nullsrc=size=640x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [upperleft]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [upperright]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [lowerleft]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [lowerright]; [base][upperleft] overlay=shortest=1 [tmp1]; [tmp1][upperright] overlay=shortest=1:x=320 [tmp2]; [tmp2][lowerleft] overlay=shortest=1:y=240 [tmp3]; [tmp3][lowerright] overlay=shortest=1:x=320:y=240 " \ output.avi
3x2
anim1.avi, anim2.avi, anim3.avi, anim4.avi, anim5.avi, anim6.avi を 3x2 に並べる.
$ ffmpeg -i anim1.avi -i anim2.avi -i anim3.avi -i anim4.avi -i anim5.avi -i anim6.avi \ -filter_complex " nullsrc=size=960x480 [base]; [0:v] setpts=PTS-STARTPTS, scale=320x240 [11]; [1:v] setpts=PTS-STARTPTS, scale=320x240 [12]; [2:v] setpts=PTS-STARTPTS, scale=320x240 [13]; [3:v] setpts=PTS-STARTPTS, scale=320x240 [21]; [4:v] setpts=PTS-STARTPTS, scale=320x240 [22]; [5:v] setpts=PTS-STARTPTS, scale=320x240 [23]; [base][11] overlay=shortest=1 [tmp1]; [tmp1][12] overlay=shortest=1:x=320 [tmp2]; [tmp2][13] overlay=shortest=1:x=640 [tmp3]; [tmp3][21] overlay=shortest=1:y=240 [tmp4]; [tmp4][22] overlay=shortest=1:x=320:y=240 [tmp5]; [tmp5][23] overlay=shortest=1:x=640:y=240 " \ output.avi
3x2
anim1.avi, anim2.avi, anim3.avi, anim4.avi, anim5.avi を 3x2 に並べる. 空いているところは白くする.
$ ffmpeg -i anim1.avi -i anim2.avi -i anim3.avi -i anim4.avi -i anim5.avi \ -filter_complex " color=c=white:size=1920x960 [base]; [0:v] setpts=PTS-STARTPTS, scale=640x480 [11]; [1:v] setpts=PTS-STARTPTS, scale=640x480 [12]; [2:v] setpts=PTS-STARTPTS, scale=640x480 [13]; [3:v] setpts=PTS-STARTPTS, scale=640x480 [21]; [4:v] setpts=PTS-STARTPTS, scale=640x480 [22]; [base][11] overlay=shortest=1 [tmp1]; [tmp1][12] overlay=shortest=1:x=640 [tmp2]; [tmp2][13] overlay=shortest=1:x=1280 [tmp3]; [tmp3][21] overlay=shortest=1:y=480 [tmp4]; [tmp4][22] overlay=shortest=1:x=640:y=480 " \ output.avi