Androidのスクリーンの動画をmp4からgifに変換する方法について。@kgmyshinさんに以下のコマンドを教えていただいたのですが、ちょっと調整した点があったので、メモ。
mkdir ________work
ffmpeg -i $0 -an -r 15 ________work/%04d.png
convert work/*.png __mov.gif
rm -r ________work
#事前準備
imagemagickとffmpegを導入します。いずれもhome brewからインストールできます。
brew install ffmpeg
brew install ImageMagick
簡単ですね。
#ffmpeg(mp4 -> png)
まず、ffmpegの以下のコマンドですが
ffmpeg -i $0 -an -r 15 ________work/%04d.png
mp4を画面ごとのpngにしてくれます。
- -i のところでファイル名(シェルスクリプトで実行しない場合はファイル名, スクリプトで実行する場合は引数指定)
- -an でオーディオは録音しない
- -r でフレームレートを指定します。上なら 15frames/secですね。
- %04d.pngの部分は 0000.pngという風にナンバリングします。
27秒の動画を変換したので420枚程のpngとなりました。
ffmpeg -i sample.mp4 -an -r 15 %04d.png
#imagemagick(png -> mp4)
convert work/*.png __mov.gif
上記を実行すると、pngが繋げられてgifに変換されますが、ここで一つ問題が発生します。ファイルサイズがデカイ。
6MBのmp4を変換した所、43MBとなってしまいました。
これはいけてないので、pngのサイズを小さくしてみます。
###圧縮率の指定
まずは圧縮率を指定してみました。-resize
はpngを圧縮する時に指定するコマンドです。2桁ですが、10の位の部分が圧縮率を指定しているようです。とりあえず20を指定してみました。
convert *.png -resize 20 output_%04d.png
convert output_*.png kekka.gif
すると、以下の様に完全にぼやけたgifになってしまいました。
###サイズの指定
次にサイズを変更してみました。先ほどの -resize
を利用しますが、今度は%をつけます。これでサイズが変更されます。
convert *.png -resize 20% output_%04d.png
convert output_*.png kekka.gif
この結果、元動画くらいくっきりgifでありながら、サイズは1/10までサイズダウンできました。
#最終的なコマンド
ffmpeg -i sample.mp4 -an -r 15 %04d.png
convert *.png -resize 20% output_%04d.png
convert output_*.png kekka.gif