encodingDebian上でChinachuを使った録画サーバを運用しているが(構築する記事は以前書いた)、これまでエンコードは普通にCPUでやっていて、そこそこ時間がかかっていた。導入が必要だと思いこんでいた。これが曲者で、CentOSじゃないとダメだったりカーネルにパッチ当てないといけなかったりでつらそうだし1で、ホストはできるだけきれいに保ちたかったので諦めていた。i3を使っているのでダメだった3。これはMSSとは異なりオープンソースで開発されているハードウェアアクセラレーション用のAPIであり、カーネルにパッチを当てなくても利用することができる1。Dockerでコンテナに閉じ込めてきれいに使うことができるわけである。探してみると、既にVAAPI対応FFmpegを利用するためのDockerfileを作っている方がいらっしゃった(https://github.com/pocka/docker-ffmpeg-vaapi)。これを使わないわけにはいかない...!と思って早速利用してみた。ホストにドライバを入れる4。i965-va-driver/dev/dri内のデバイスファイルを確認する。このどっちかが当たりらしい。続くコマンドでデバイスファイルを指定する必要があるので全部試すとどれか動くものがあるはずで、動いたものが当たりだ(雑)。自分の環境ではcard0だった。Webで調べた感じだと/dev/dri/renderD128の人もいるみたい?あとは、先にあげたリポジトリのREADMEにあるコマンドを参考にして以下のコマンドでサクッとエンコードができた。/data/test-out.mp4--deviceと-vaapi_deviceには上で調べたデバイスファイルのどれかを与える(動くものを探す)。{デバイスファイル}とした。前者はホスト上の全デバイスへのアクセスへのアクセス権限をコンテナに与えるが、後者は特定のデバイスにのみ与えるのでより安全だ5。1000:1000と一般ユーザのPIDを渡して一般ユーザ権限で動かそうとしたところ、コンテナ内でデバイスファイルのパーミッション(660)に引っかかって動作しなかった。44と同時に渡してあげると良い。FFmpegのオプションは説明しきれないので適当に調べて欲しい。以上で一応エンコードはできるのだが、何故かMacのQuickTimeで再生できなかった。Dockerfileに記述されているソフトウェアのバージョンを最新のものにしてビルドし直したイメージを使ってエンコードすることでこの問題は解決した。本家にプルリクエストは投げてあるが、マージされるまでは僕のリポジトリのDockerfileを使うと良いかもしれない(https://github.com/mecab/docker-ffmpeg-vaapi)。QSVを利用して高速にエンコードする方法を説明した。エンコードの効率や品質はQSVを使わずにエンコードするのに比べてあまり良くないが、とにかく早いので満足している。qmax=31で10倍速くらい出ている。(ところでこれ調べてて知ったんですが、Skylake以降だったらi3でもVT-d対応してるんですね...。QSVについて書いたが、VAAPIに対応しているnVidiaとかAMDのGPUでも同じ感じでいけるはずで、i965-va-driverの代わりに適切なドライバをインストールすればいいと思う。va-driver-allを入れれば関連するドライバが全部入るはずだ。BookmarkJSAI2017での発表が炎上している件についての私見。(JSAI2017)で行われたある発表が炎上しているのを観測している。祭りごとが好きな性分なので基本的に炎上はたーのしー!もっとドンパチやれーと思って眺めているのだけれど、思ったより泥沼になっていてつらい気がしたのでまとめつつ私見を書くことにした。思うところは基本的にTwitterにぼちぼち書いていたので、それらを載せつつ適宜文章を補う形で書いていこうと思う。今回の炎上の経緯を簡単にまとめる。JSAI2017で近江らにより「ドメインにより意味が変化する単語に着目した猥褻な表現のフィルタリング」という発表がなされた。ブログを更新していなかったが、最近は「ぼくもあの日、有給を取ってインスタンスを立ててさえいれば今頃年収3億ぐらいでドワンゴに雇われていたのでは...。」と思う日々を過ごしている。いえ、インスタンス運用しつつ運用ネタでも書けば、まだ年収1億ぐらいでなら雇われるチャンスがあると思うので、運用ネタでも書くことにする。ユーザが20人程度いる弱小インスタンスを回しているが、つまりデータを飛ばすと20人から怒られてしまう。小心者なのであまり怒られたくはない。いうことでPostgresのバックアップを構成することにした。