[FFmpeg] libavfilter関連ツールのインストール

## Libavfilter
``FFmpeg``には複雑な処理をおこなえるフィルターがたくさん備わっているのだが、使い方がちょっとむずかしい。
[公式ドキュメント](https://ffmpeg.org/ffmpeg-filters.html)をみてもさっぱり感はある。

そこでまずは、同梱されているユーティリティーツールを使ってみることにする

## 前提
``ffmpeg``をインストール済み（してない人は[こちら](https://ffmpeg.org/)へ）

## graph2dotのビルドとインストール

```shell-session
$ cd ffmpeg
$ make alltools
# cp tools/graph2dot /usr/local/bin
```
```shell-session
$ graph2dot -h
Convert a libavfilter graph to a dot file.
Usage: graph2dot [OPTIONS]

Options:
-i INFILE         set INFILE as input file, stdin if omitted
-o OUTFILE        set OUTFILE as output file, stdout if omitted
-h                print this help
```
```shell-session
$ echo nullsrc,scale=640:360,nullsink | graph2dot -o graph.tmp
[Parsed_nullsrc_0 @ 0x30d78e0] size:320x240 rate:25/1 duration:-1.000000 sar:1/1
[Parsed_scale_1 @ 0x30d7ca0] Setting 'w' to value '640'
[Parsed_scale_1 @ 0x30d7ca0] Setting 'h' to value '360'
[Parsed_scale_1 @ 0x30d7ca0] w:640 h:360 flags:'bilinear' interl:0
query_formats: 3 queried, 2 merged, 0 already done, 0 delayed
[Parsed_scale_1 @ 0x30d7ca0] w:320 h:240 fmt:yuv420p sar:1/1 -> w:640 h:360 fmt:yuv420p sar:3/4 flags:0x2
```
```shell-session
$ cat graph.tmp
digraph G {
node [shape=box]
rankdir=LR
"Parsed_nullsrc_0\n(nullsrc)" -> "Parsed_scale_1\n(scale)" [ label= "inpad:default -> outpad:default\nfmt:yuv420p w:320 h:240 tb:1/25" ];
"Parsed_scale_1\n(scale)" -> "Parsed_nullsink_2\n(nullsink)" [ label= "inpad:default -> outpad:default\nfmt:yuv420p w:640 h:360 tb:1/25" ];
}
```

## graphvizのインストール
``graph2dot``というツールは、グラフコンテキストからグラフスクリプト（？）を生成してくれるツールで
それだけではただのテキストですので、``dot``というツールで画像化します。

``dot``は``graphviz``というパッケージで管理されています。
``yum``管理されているので、簡単にインストール。

[man dot](http://linux.die.net/man/1/dot)
[graphviz](http://www.graphviz.org/)

```shell-session
# yum install graphviz
$ rpm -qs graphviz | grep dot
normal        /usr/bin/dot
normal        /usr/bin/dot2gxl
normal        /usr/bin/dotty
normal        /usr/bin/gxl2dot
normal        /usr/bin/vimdot
normal        /usr/lib64/graphviz/libgvplugin_dot_layout.so.6
normal        /usr/lib64/graphviz/libgvplugin_dot_layout.so.6.0.0
normal        /usr/lib64/libxdot.so.4
normal        /usr/lib64/libxdot.so.4.0.0
normal        /usr/share/graphviz/lefty/dotty.lefty
normal        /usr/share/graphviz/lefty/dotty_draw.lefty
normal        /usr/share/graphviz/lefty/dotty_edit.lefty
normal        /usr/share/graphviz/lefty/dotty_layout.lefty
normal        /usr/share/graphviz/lefty/dotty_ui.lefty
normal        /usr/share/man/man1/dot.1.gz
normal        /usr/share/man/man1/dotty.1.gz
normal        /usr/share/man/man1/vimdot.1.gz
```

``dot``で画像化

```shell-session
$ dot -Tpng graph.tmp -o graph.png
```
![graph.png](https://qiita-image-store.s3.amazonaws.com/0/31085/d2f2a9ce-e59c-180b-f7e5-bf2581be2649.png)



すこし複雑にする

```shell-session
$ echo "nullsrc,split[main][tmp];[tmp]crop=iw:ih/2:0:0,vflip[flip];[main][flip]overlay=0:H/2,nullsink" | graph2dot -o graph2.tmp
$ dot -Tpng graph2.tmp -o graph2.png
```
![graph2.png](https://qiita-image-store.s3.amazonaws.com/0/31085/9c80d737-a0a4-2f38-67dc-d61559f0f570.png)

小さい。。
``dot``以外に、レイアウトを変更するコマンドやオプションがたくさんありますので、[マニュアル](http://linux.die.net/man/1/dot)を御覧ください。

## おわりに
無事に自分の記述しているフィルターグラフが正しいかどうかを可視化することができました。
エンジョイ Libavfilter !!