動画や画像の編集は、スマフォのアプリや動画、画像編集ソフトを使って行っている方は多いと思います。Linux でも動画、画像編集アプリは数多く用意されています。しかしLinux上で動くほぼ全てのアプリは、動画は FFmpeg、画像は、ImageMagick というライブラリが使用されています。これらはコマンドでも利用出来るので、今回は、コマンドだけで動画の1シーンを jpeg ファイルとして抜き出して、それを連結して gif ファイルを作成するという方法を紹介します。
FFmpeg と ImageMagick は以下のコマンドでインストールします。
$ sudo apt install ffmpeg imagemagick
まず動画から1シーンを切り出す前に、動画の情報を -i オプションを使って取得します。
$ ffmpeg -i input.m4v
:
Duration: 00:48:32.13, start: 0.000000, bitrate: 1426 kb/s 動画の長さと開始時間
動画から画像を取り出す方法は以下のコマンドです。抜き出す始点を秒数で指定します。
$ ffmpeg -i input.m4v -ss 60 -vframes 1 out.jpg
連続で画像を取り出す場合は以下のように実行します。
$ ffmpeg -i input.m4v -ss 60 -t 10 -r 1 out_%03d.jpg
$ ls
out_001.jpg out_002.jpg out_003.jpg out_004.jpg out_005.jpg
out_006.jpg out_007.jpg out_008.jpg out_009.jpg out_010.jpg
-i input.m4v : 入力動画
-vframes : フレーム数
-ss 60 : 抜き出し始点秒 (開始から60秒目から)
-t 10 : 抜き出し秒数 (10秒)
-r 1 : 1秒あたり何枚抜き出すか
out_%03d.jpg : jpeg で[out_001.jpg]から連番で書き出し
出力した画像ファイルを ImageMagick に含まれている convert コマンドで結合させます。
$ convert -layers optimize -loop 0 -delay 100 out_*.jpg out.gif
eog(Eye of GNOME) でgifファイルを確認できます。
$ eog out.gif
-layers optimize : 画像の最適化
-loop : ループの回数(0 なら無限ループ)
-delay : 画像の切り替わるタイミングミリ秒