インストールコマンド一発！ MAC の ffmpeg で H.265(HEVC) を使えるようにする

# 2019/4/15 追記

どうやら brew で ffmpeg インストール時にオプションを指定できなくなった模様。

**修正版記事を以下にアップしました。**

[Homebrew の ffmpeg でいつの間にかインストールオプションが無くなってた件・・・](https://qiita.com/tomopyonsama/items/ced7dd16bcbec96ae37c)




# はじめに

こんにちわ streampack の木村です。

事の発端は、自分の業務用 MAC で ffmpeg を弄って HEVC エンコードをしようとした際に、以下のエラーで怒られちゃいました。

`Unknown encoder 'libx265'`

ffmpeg は色々なマシンに入れてあるので、「あれ、自分のマシンには x265 入れてなかったっけ？」ってことで確認することに。
確か brew で入れたはず。


```
$ brew ls
ffmpeg	lame	x264	xvid
```

はい、おりませんね。

```
$ brew install ffmpeg
```

オプションを指定せず上記コマンドだけでインストールすると `lame` `x264` `xvid` しかインストールされません。

ffmpeg のソース持ってきて、x265 を git から clone してソースからコンパイルすればできますが、面倒なので Homebrew を使ってインストールコマンド一発で HEVC 対応の ffmpeg をインストールします。

あ、**Homebrew がインストールされていること前提**です。

# インストール

ついでなので他に必要そうなものもまとめて入れてしまいましょう！
`reinstall` で `uninstall` 後に `install` つまり再インストールになります。
下記コマンドを叩いて待つこと10分程度・・・

```
$ brew reinstall ffmpeg --with-fdk-aac --with-freetype --with-libass --with-libvpx  --with-sdl2 --with-x265
```

インストールされていますね。

```
$ brew ls
cairo			graphite2		pcre
fdk-aac			harfbuzz		pixman
ffmpeg			icu4c			pkg-config
fontconfig		lame			texi2html
freetype		libass			x264
fribidi			libffi			x265
gettext			libpng			xvid
glib			libvpx
gobject-introspection	nasm
```

インストール時の情報は `brew info formula` で確認できます。

```
$ brew info ffmpeg
ffmpeg: stable 3.4.2 (bottled), HEAD
Play, record, convert, and stream audio and video
https://ffmpeg.org/
/usr/local/Cellar/ffmpeg/3.4.2 (253 files, 54.6MB) *
  Built from source on 2018-03-09 at 16:11:20 with: --with-fdk-aac --with-libass --with-sdl2 --with-x265 --with-freetype --with-libvpx
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/ffmpeg.rb
==> Dependencies
Build: nasm ✔, pkg-config ✔, texi2html ✔
Recommended: lame ✔, x264 ✔, xvid ✔
Optional: chromaprint ✘, fdk-aac ✔, fontconfig ✔, freetype ✔, frei0r ✘, game-music-emu ✘, libass ✔, libbluray ✘, libbs2b ✘, libcaca ✘, libgsm ✘, libmodplug ✘, librsvg ✘, libsoxr ✘, libssh ✘, libvidstab ✘, libvorbis ✘, libvpx ✔, opencore-amr ✘, openh264 ✘, openjpeg ✘, openssl ✘, opus ✘, rtmpdump ✘, rubberband ✘, sdl2 ✔, snappy ✘, speex ✘, tesseract ✘, theora ✘, two-lame ✘, wavpack ✘, webp ✘, x265 ✔, xz ✘, zeromq ✘, zimg ✘
==> Options
--with-chromaprint
	Enable the Chromaprint audio fingerprinting library
--with-fdk-aac
	Enable the Fraunhofer FDK AAC library
--with-fontconfig
	Build with fontconfig support
--with-freetype
	Build with freetype support
--with-frei0r
	Build with frei0r support
--with-game-music-emu
	Build with game-music-emu support
--with-libass
	Enable ASS/SSA subtitle format
--with-libbluray
	Build with libbluray support
--with-libbs2b
	Build with libbs2b support
--with-libcaca
	Build with libcaca support
--with-libgsm
	Build with libgsm support
--with-libmodplug
	Build with libmodplug support
--with-librsvg
	Enable SVG files as inputs via librsvg
--with-libsoxr
	Enable the soxr resample library
--with-libssh
	Enable SFTP protocol via libssh
--with-libvidstab
	Enable vid.stab support for video stabilization
--with-libvorbis
	Build with libvorbis support
--with-libvpx
	Build with libvpx support
--with-opencore-amr
	Enable Opencore AMR NR/WB audio format
--with-openh264
	Enable OpenH264 library
--with-openjpeg
	Enable JPEG 2000 image format
--with-openssl
	Enable SSL support
--with-opus
	Build with opus support
--with-rtmpdump
	Enable RTMP protocol
--with-rubberband
	Enable rubberband library
--with-sdl2
	Enable FFplay media player
--with-snappy
	Enable Snappy library
--with-speex
	Build with speex support
--with-tesseract
	Enable the tesseract OCR engine
--with-theora
	Build with theora support
--with-tools
	Enable additional FFmpeg tools
--with-two-lame
	Build with two-lame support
--with-wavpack
	Build with wavpack support
--with-webp
	Enable using libwebp to encode WEBP images
--with-x265
	Enable x265 encoder
--with-xz
	Enable decoding of LZMA-compressed TIFF files
--with-zeromq
	Enable using libzeromq to receive commands sent through a libzeromq client
--with-zimg
	Enable z.lib zimg library
--without-gpl
	Disable building GPL licensed parts of FFmpeg
--without-lame
	Disable MP3 encoder
--without-qtkit
	Disable deprecated QuickTime framework
--without-securetransport
	Disable use of SecureTransport
--without-x264
	Disable H.264 encoder
--without-xvid
	Disable Xvid MPEG-4 video encoder
--HEAD
	Install HEAD version
```

早速エンコードを試してみます

```
$ ffmpeg -i IMG_7611.MOV -vcodec libx265 -acodec copy IMG_7611.mp4

{中略}

video:10865kB audio:297kB subtitle:0kB other streams:0kB global headers:2kB muxing overhead: 0.393741%
x265 [info]: frame I:      7, Avg QP:28.87  kb/s: 17503.11
x265 [info]: frame P:    380, Avg QP:30.63  kb/s: 9583.81
x265 [info]: frame B:   1137, Avg QP:36.81  kb/s: 1378.84
x265 [info]: Weighted P-Frames: Y:45.0% UV:42.4%
x265 [info]: consecutive B-frames: 0.5% 2.6% 1.8% 92.8% 2.3%

encoded 1524 frames in 181.72s (8.39 fps), 3498.76 kb/s, Avg QP:35.23
```

もう怒られませんね！