FFmpegで動画をGIFに変換


## FFmpegとは
FFmpegは動画と音声を変換することのできるソフト
オプションがとても多く、細かい調整が可能
[公式document](https://ffmpeg.org/ffmpeg.html)

GIF画像やTwitter用の動画作成に便利です

## mov → gif 変換後
<iframe width="560" height="315" src="https://www.youtube.com/embed/6oLsr05oFYg?rel=0" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

[cat.mp4](https://www.pexels.com/video/funny-animals-1184886/)
↓
cat.gif
![cat.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/40799/df3a2338-243e-24ea-27d3-d53ec1270ccf.gif)

## インストール
```console:ターミナル
$ brew install ffmpeg
```

## スマホサイズに変換

```console:ターミナル
# mp4を 横幅320に合わせた 10fpsのgifに変換
$ ffmpeg -i base_file.mp4 -vf scale=320:-1 -r 10 output.gif
```

## 基本的な変換
`-i` インプットオプション

```console:base_file.mp4をoutput.gifに変換
$ ffmpeg -i base_file.mp4 output.gif
```

綺麗なgifになるが、元動画の倍の容量になった


## フレームレート
`-r` オプションで指定

```console:10fps
$ ffmpeg -i base_file.mp4 -r 10 output.gif
```

指定しないとそのままのフレームレートで変換する模様
gifの容量を小さくするなら、fpsを調整すれば手っ取り早い

`-r 10  →  -r 5` にすれば容量も半分になります


## ビットレート

```console:横幅320
$ ffmpeg -i base_file.mp4 -vf scale=320:-1 -b:v 1.0M output.gif
```


## リサイズ（固定比）
`-vf` オプションで指定
`-vf scale=320:-1` で横幅320に合わせて縦幅を調整

```console:横幅320
$ ffmpeg -i base_file.mp4 -vf scale=320:-1 output.gif
```

スマホ等はこれでおkかと。


## リサイズ（サイズ指定）
`-s` オプションで指定

```console:320x640の場合
$ ffmpeg -i base_file.mp4 -s 320x640 output.gif
```

簡略名で指定することも可能

```sh
-s qvga
-s vga
-s sqcif
-s qcif
```

## Twitter用に動画を変換（mp4→mp4）

```
【公式仕様】
MP4（H264形式、AAC音声）をサポート。
サイズは最大512MB
長さは2分20秒以下
最小解像度: 32 x 32
最大解像度: 1920 x 1200（および1200 x 1900）
縦横比: 1:2.39～2.39:1の範囲（両方の値を含む）
最大フレームレート: 40fps
最大ビットレート: 25Mbps
```

```console
$ ffmpeg -i base_file.mp4 -pix_fmt yuv420p -vcodec h264 -acodec aac -strict experimental output.mp4
```

サイズと長さが範囲内ならこれでいけるはず（アップまで試してないです）


## 元動画を圧縮

```console
$ ffmpeg -i input.mp4 -c:v libx264 -c:a aac -s 1280x720 output.mp4
```

## 指定した秒数で切り取り

```console
// 0秒地点から30秒を切り取る
$ ffmpeg  -i hoge.mp4 -ss 0 -t 30 hoge2.mp4
```

## 動画から音声のみをカット

```console
// -an はオーディオを disable にするオプション
$ ffmpeg -i hoge.mp4 -vcodec copy -an hoge2.mp4
```

## 対応する拡張子

```
302 669 722 3g2 3gp a64 aa3 aac abc ac3 adf adp adts adx aea afc aif aifc aiff amf amr ams ans ape apl aqt art asc asf 
ass ast au avi avr avs bin bit bmp bmv brstm caf cavs cdata cdg cdxl cgi cif daud dbm dif diz dmf dnxhd dpx drc dsm dtk
dts dtshd dv dvd eac3 ext f4v fap far ffm ffmeta flac flm flv g722 g723_1 g729 gif gsm gxf h261 h263 h264 hevc ice ico 
idf idx ircam isma ismv it itgz itr itz ivf jls jpeg jpg js jss latm lbc ljpg loas lvf m1v m2a m2t m2ts m2v m3u8 m4a m4v 
mac mdgz mdl mdr mdz med mid mjpeg mjpg mka mkv mlp mmf mod mov mp2 mp3 mp4 mpa mpc mpeg mpg mpl2 mt2 mtm mts mvi mxf mxg 
nfo nist nut ogg ogv okt oma omg opus paf pam pbm pcx pgm pgmyuv pjs png psm psp ptm pvf qcif ra rco rcv rgb rm roq rsd rso 
rt s3gz s3m s3r s3z sami sbg sdr2 sf shn smi son sox spdif sph spx srt ssa stm sub swf tak tco thd ts tta txt ult umx v 
vb vc1 viv vob voc vqe vqf vql vt vtt w64 wav webm wma wmv wtv wv xl xm xmgz xmr xmz y4m yop yu 
```

## 参考
[ffmpegの使い方](http://tech.ckme.co.jp/ffmpeg.shtml)
[GithubやQiitaに載せるgif形式の動画を作成する方法](http://qiita.com/syamaoka/items/4d4054cd75df00460925)
[基本操作](http://dyama.org/ffmpeg/)
[オプションまとめ](http://mobilehackerz.jp/archive/wiki/index.php?%BA%C7%BF%B7ffmpeg%A4%CE%A5%AA%A5%D7%A5%B7%A5%E7%A5%F3%A4%DE%A4%C8%A4%E1)
[動画圧縮する時ってみなさんどうしてます？](http://creatorsblog.nijibox.jp/mov-optimize/)
[ffmpeg -an で撮影済みビデオの音を消去](https://qiita.com/UedaTakeyuki/items/dde975d350cf640d8af8)


## 最後に
フリーソフトの[Convertio](https://convertio.co/ja/mp4-gif/)などでも変換可能ですが、
TwitterなどのSNSにあげるものは、FFmpegなどで公式上限までクオリティを上げた高品質な物を公開していきたいですね