【Linux】コマンドラインで動画からGIFアニメを作る
今日はLinuxについての記事です。
とはいっても、カーネルの仕組みがどうとか小難しい話じゃなくて、タイトル通り、動画ファイルからGIFアニメへの変換について。
最近、GIFアニメの利用価値が見直されてきています(と聞いてます)。
動画ファイルよりもサイズが小さいとか、ブラウザ上でクリック無しで再生できるとか、そういった点が再評価されているようです。
確かに、「動画を上げるほどじゃないけど、動きがないと伝えづらい」というような時にはGIFアニメが良さそうですが、伝えたい部分だけ動画から抜き出してGIFアニメにする、というのは結構面倒くさいものです。
今回は、この面倒くさい動画カット→GIFアニメを(比較的)簡単に行う方法を紹介します。
ただし、Linuxでコマンドラインを使って行うという、かなりニッチ層へ向けた記事となっております。
LinuxでもAvidemuxなどGUIの動画編集ソフトがありますが、今回想定では凝った編集はせず、動画の一部を抜き出すだけですので、その場合はコマンドラインの方が手っ取り早いです。たぶん。
なお、Linuxと言ってますが、ディストリビューションはUbuntuを想定しております。
(他ディストリでもやり方は変わらないかと思いますが、最初の導入部分だけは、各環境に合わせて行っていただく必要があります。)
必要ツールの導入
さて、まずは必要ツールの導入です。とはいえ、特段、知る人ぞ知るみたいなツールを紹介するわけでもなく、普通に「ffmpeg」を導入するだけです。
Ubuntu 16.04の場合は、以下でインストールできます
sudo apt install ffmpeg
私は、Ubunutu14.04を使っていますが、14.04ではffmpegが公式リポジトリから消されてしまいました。
そのため、リポジトリを追加してインストールする必要があります。
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get install ffmpeg
CentOSやDebianを使っている方は…まあ、どうにか適当にインストールしてください(投げやり)。
動画のカット
さて、動画カット〜GIFアニメへの変換ですが、一応、動画カットとGIFアニメ変換を分けて記述します。
実際にはコマンド一発変換も可能なのですが、オプションだらけになってややこしいので。
(一発変換は後ほど取り上げます。)
動画の一部抜き出しは、以下コマンドで行います。
ffmpeg -ss 抜き出し開始時間 -i 動画ファイル名 -t 抜き出す時間 出力ファイル名
抜き出し開始時間/抜き出す時間は、hh:mm:ss.ssで指定してください。hhおよびmmは省略可能です。
ex:foo.mp4の2分16秒地点から、10.5秒間をbar.mp4として出力
ffmpeg -ss 2:16 -i foo.mp4 -t 10.5 bar.mp4
GIFアニメへの変換
お次はGIFアニメへの変換です。
ffmpeg -i 動画ファイル名 -an -r フレーム数 -s 画面サイズ -f gif 出力ファイル名
画面サイズは、横ピクセル数x縦ピクセル数(真ん中のxは小文字のエックスです。)で指定してください。
ex;前節で作成した動画ファイルをGIFアニメに変換
ffmpeg -i bar.mp4 -an -r 15 -s 320x180 -f gif buzz.gif
以上で変換完了です。
一発変換
とりあえず動画カット、GIF変換と2段階にわけて書きましたが、前述の通り、コマンド一発で変換も可能です。
単に、双方のオプションを一つにするだけですが。
ex:一発変換
ffmpeg -ss 2:16 -i foo.mp4 -t 10.5 -an -r 15 -s 240x180 -f gif buzz.gif
サンプル画像など
重くなってしまいますが、以下、動画から変換したGIFアニメサンプルです。
画面うるせえ。インターネット黎明期みたい。
カンフー・ジャングル。
動きの速いシーンもフレーム数を上げれば、まあそこそこは。(20フレーム)
どマイナー映画、水滸伝-男たちの挽歌より。
魯智深が林冲を助けに来たシーン(原作とは異なります)での、数珠による範囲攻撃(斬新)。
ちなみに、兵2名を盾にするクソ野郎は陸謙。君たち、嫌なときは嫌だって言っていいんだよ!*1
*1:軍隊除く