静止画がスライドショー的に順番に映し出される、いわゆる紙芝居動画は、
動画の中でもかなりシンプルな部類ですね。
動画編集ソフトを使えば、簡単に作れますが、
この程度の動画であれば、自動で作れても良さそうなものです。
というわけで、紙芝居動画の自動生成に向けて、
コマンドラインから動画を作ってみましょう。
作成の手順
動画生成には、ffmpegというコマンドを使います。
ffmpeg では、動画や音声を合成したり、
画質を変更したりと様々な動画編集機能を持っている便利なものです。
この記事では、この ffmpeg の機能を使って紙芝居動画を作っていきます。
便利な ffmpeg ですが、
コマンド一発で紙芝居動画を作るような機能は
さすがに用意されていないので、
いくつかの機能を組み合わせて、順を追って生成していきます。
大まかな流れは次の通りです。
- 静止画ごとに、一定時間画像を表示するだけの動画を生成する
- 生成した動画を繋げる
- 動画にBGMを付ける
準備
ffmpeg が必要になるので、
インストールしておきましょう。
Windowsの場合は、ffmpegのサイトから、
ダウンロードできます。
また、紙芝居の生成に必要な画像ファイルも予め準備しておきましょう。
1枚の静止画から動画ファイルを生成する
まずは、静止画のファイルを動画ファイルにします。
1枚の静止画を動画にするには次のコマンドを使います。
ffmpeg -loop 1 -i [画像ファイル] -t [動画の秒数] -vcodec libx264 -pix_fmt yuv420p [出力ファイル名]
loop
は入力画像をループ表示するすることを表していて、
-t
で時間を指定しています。
vcodec
でエンコーディング方式を指定しますが、
今回はmp4
でのエンコーディングをするためlibx264
を指定します。
それに合わせて、ピクセルフォーマットはyuv420p
を指定しています。
繋げたい全ての画像に対して、 上のコマンドで短い動画を生成しておきます。
生成した動画を繋げる
各静止画を表示する動画ファイルを生成したら、
それらを繋げて一つの動画ファイルにします。
連結するファイルの一覧表を作る
動画を連結する際には、
どの動画をどの順で繋げれば良いかを指定するため、
動画ファイルの一覧を記載したファイルを用意しておきます。
file /path/to/video1 file /path/to/video2 file /path/to/video3
上のような内容を記載したテキストファイルを作成します。
このファイルにかかれた順に、動画を繋げていきます。
ファイルの一覧に記載された動画を繋げる
それでは、再び ffmpeg コマンドを使って、
動画を繋げましょう。
ffmpeg -f concat -i [list_file] -c copy [output]
上で作成した動画ファイルの一覧をlist_file
に指定すると、
その中の全ての動画を順に繋げた動画ファイルが出力されます。
BGM を挿入する
上で出来た動画ファイルは無音の動画ファイルなので、
なんだか少し寂しい感じがします。
そこで、BGMを挿入してあげましょう。
動画と音声ファイルを合成して、BGM入りの動画を作ります。
ffmpeg -i [動画ファイル] -stream_loop -1 -i [音声ファイル] -t [動画の秒数] [出力ファイル]
-stream_loop -1
を指定することで、BGMを無限ループさせています。
そのため、-t
で動画の長さ指定しないと
無限に長い動画ファイルを作ってしまうので注意しましょう。
まとめ
紙芝居動画をコマンドで生成する方法をまとめました。
もちろん、紙芝居動画を生成する方法は、この方法以外にもあります。
例えば、ffmpeg では
連番の静止画像を使って動画を生成することができるので、
表示したい長さ分だけ、それぞれの静止画を複製して、
ffmpegで合成ということもできます。
ただ、一時的なファイルが大量に発生することになるのがちょっと嫌ですね。
他にも、入力のフレームレートを調整することで、
1枚の画像の表示時間を変えることもできますが、
これだと、どの画像も同じ時間表示されることになるので、
画像ごとに表示時間を変えたいなどの場合に困ったことになります。