アノテーションツールELANの使い方


# アノテーション作業？
動画や音声の特定区間に注釈を与え，その注釈にラベルを振ることをある分野の研究ではよくやります．
具体例としては，インタビューする人とされる人が対話する様子を収録した動画に対して，インタビューする/される人それぞれの発話区間を認定し，さらに各発話区間についてどちらの話者による発話かのラベルを与える，のような作業です．

アノテーション作業に使用するソフトウェアとして，[ELAN](https://tla.mpi.nl/tools/tla-tools/elan/)が有名です．

この記事ではELANの基本的な使い方に加え，今まで経験した事例に基づくTipsも紹介します．
ELANを触ったことがない人でも必要最低限のアノテーション作業ができるようになる記事を目指します．
この記事で使用する環境は以下です．
* OS: Win 10 64bit
* ELAN: ver. 5.7 (非javaFX対応版)

# How to インストール
インストーラー実行すれば終わります．

# 作業できるようにする

まずはELANを実行しましょう．すると，以下のような画面になるはずです．
![fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/8c957137-af4c-4953-caf3-327b4e7dcf3d.png)
初見の人は何するか戸惑う超絶不親切UIです．

まずは`ファイル`->`新規作成`と辿り，`新規作成ダイアログボックス`を表示させましょう．

![fig2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/785ccc40-11f9-9637-8107-2b0ef46d81df.gif)


`新規作成ダイアログボックス`において，アノテーションしたい音声 or 動画ファイルを左のペインで選択し，画面中央にある`>>`ボタンを押します．する右のペインに選択されたファイルのパスが表示されるはずです．アノテーションできるファイルフォーマットは`File Format`プルダウンボックスを展開すれば確認できます．ちなみに今回は，ELANの公式で配布されている[サンプルの音声ファイル](https://www.mpi.nl/tools/elan/elan-example1.wav)を使用しています．
その後，画面右下の`OK`ボタンを押してください．すると，以下のように音声ファイルが開かれた状態になります．

![fig3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/2afa2e41-11cf-1b07-86c3-23ac2d383ba2.png)

これで作業のための最初のステップを達成です．やったね！
とりあえず現在の状態をファイルとして保存しておきましょう．保存の方法は`Ctrl + S`でも，`ファイル`->`保存`でも．
初回保存時は当然，名前を付けることを要求されます．この記事ではその名前を`test`としました．ELANは`*.eaf`というフォーマットでファイルを保存するので，任意の場所に`test.eaf`が生成されました．ちなみに，`*.psfx`というファイルも同時に生成されますが，これは作業の状態を保存する一時ファイルのようなものなので，不要なら消しても問題はないようです．

# Let's 作業

以下の図に画面の見かたを示します．よく見るものはこれくらいです．
![fig4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/37e34e5f-c4ce-7221-57ba-75b0f2725eeb.png)

まず，ボタングループにある，再生ボタン`▶`を押下すると，音声が再生されます．ちなみにショートカットキー`Ctrl + Space`でも再生ができます．ELANでの作業はショートカットキーを覚えると効率化できるので，覚えましょう．

次に注釈を与える方法です．現在，`default`と名付けられた注釈層が選択されている状態です．この状態で注釈を与えたい区間をマウスでドラッグし，ファイルメニュー`注釈`->`ここに新規注釈を作成`を選択します．その後`Enter`キーを押下すると，下図のように`default`注釈層に注釈が作成されます．
![fig5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/94975293-44a2-9375-5d62-d0e0b5e6ace3.gif)
ちなみに，マウスでドラッグする場所は，注釈層の上・音声波形の上ともに可能です．注釈の作成は`Alt + N`でも可能です．

作成した注釈に，任意のラベル（文字列）を与えることが可能です．そのためには，注釈をダブルクリックする，あるいは`Alt + M`を押下します．
![fig6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/185cebd9-fa76-dcc0-ddb4-65557f9aa7e4.png)
ダブルクリックの場合はそのまま注釈に文字列を記入できます（図左）．一方で`Alt + M`の場合は，簡易的なエディターが表示されます（図右）．

沢山の注釈を与えた後は，注釈を一覧しましょう．画面上部にいろんなタブがありますが，その中の`格子`タブを選択し，`< select a tier >`から，`defalut`を選択します．ここで，`tier`とは注釈層のことです．
![fig7.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/72853c01-748b-7b33-44aa-4873df640815.gif)
この`格子`タブ上の注釈をクリックすると，その注釈がある場所まで再生箇所をジャンプすることができます．

## ショートカットキー
頻繁に使用するショートカットキーや操作を以下に列挙します．

|操作|入力|
|:--|:--|
|再生 / 停止|Ctrl + Space|
|選択区間の再生 / 停止|Ctrl + Shift + Space|
|表示範囲のスライド|Shift + マウスホイール上下|
|表示倍率の変更|Ctrl + マウスホイール上下|
|注釈の新規作成|（任意の範囲を選択した上で）Alt + N|
|注釈の編集|（注釈を選択した上で）Alt + M|
|後方の注釈の選択|（注釈を選択した上で）Alt + →|
|前方の注釈の選択|（注釈を選択した上で）Alt + ←|
|注釈の移動|（Altを押下した状態で）注釈をドラッグ|
|注釈の範囲変更|（Altを押下した状態で）注釈の端をドラッグ|

ELANには様々なショートカットキーが定義されています．
ファイルメニューの`表示`->`ショートカット`を辿ると，ショートカットキー一覧が表示されます．ウィンドウ上部には複数のタブがありますが，`General`と`注釈モード`タブに表示されるショートカットキーだけ把握すれば問題ありません．

## 最低限のカスタイマイズ
ファイルメニューの`編集`->`環境設定`->`環境設定の編集...`を辿ると，設定ウィンドウが表示されます．以下の項目を変更すると，快適に作業できます．設定後はELANを再起動しましょう．

|項目|変更|どうなる？|
|:--|:--|:--|
|`Platform/OS`->`Use Windows Look and Feel`|☑|`新規作成ウィンドウ`が使いやすくなる|
|`Viewers`->`Horizontal scroll speed...(略)`|50|`Shift + マウスホイール上下`の速度が速くなる|

# 作業結果の出力
作業結果は独自形式の`*.eaf`だけでなく，タブ区切りテキストやhtmlとしてエクスポートすることも可能です．ここでは，分析に使用しやすいタブ区切りテキストとしてエクスポートします．

ファイルメニューの`ファイル`->`別ファイル形式で保存`->`タブ区切り文書ファイル形式で...`を選択します．そして，次の図と同じように設定を変更してください．
![fig8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/cbb0d3e0-2709-5b12-9a11-49d298fa98db.png)
この設定でエクスポートされたテキストファイルを確認すると，以下のようになっています．

```text:test.txt
default	17.615	18.607	ハンバーグ
default	19.037	19.546	食べたい
default	19.67	20.779	ひき肉買わなきゃ
```
各行が注釈を示し，各行にはデータがタブ（`\t`）区切りで入力されています．左から順に，注釈層の名前，注釈の開始時間，注釈の終了時間，注釈内容，となっています．注釈の開始/終了時刻は`秒.ミリ秒`なので．`1分08秒256`なら，`68.256`になります．

ちなみに，保存された`*.eaf`をテキストエディタで開くと，単なるxmlであることがわかります．

# Tips
こういう時はこうするとよい，というTips集です．
今まではかなり丁寧に説明してきた自負がありますが，ここからは簡易に説明します．

## 動画のアノテーション時，ELANの動作がもたつく
高品質な動画をELANにリンクすると動作がもたつきます．`ffmpeg`などを使用し動画そのもののファイルサイズを縮小しましょう．
もしかすると，メディアファイルをSSDに配置するのも有効なのかもしれません．

## 注釈にラベルを振る際，すでに定義してあるラベル内からの選択式にしたい
例えば，動物を記録した映像に対して，`歩いている`，`走っている`，`寝ている`，といったラベルを振る作業を，複数の第三者に依頼したい場合があります．
その時，その作業者がラベルの文字列を間違えないように，選択式にすることは丁寧です．

その時は，`管理語`を使用します．

ファイルメニューの`編集`->`管理語の編集...`からウィンドウを開き，下図のように必要な項目を入力します．
![fig10.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/f74f0fbd-bb8b-f04f-9814-1679271bc08e.gif)
その後，ファイルメニューの`言語タイプ`->`言語タイプの変更`で開くウィンドウにおいて，`管理語を使う`のプルダウンボックスを，`None`から先ほど記入した管理語名（この例では`behaviors`）に変更します．
そして注釈を編集すると，以下のように選択式に変更されていることが確認できます．
![fig11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/ff26bbad-a62d-6f47-317d-4ae5cd92dc18.png)

ちなみに管理語はファイル出力が可能です．`管理語を編集する`ウィンドウの，`Export .ecv`から．
インポートは同ウィンドウの`External CV`から．

## すでに定義してある注釈に対して，書き起こし作業を実施したい
ファイルメニューの`オプション`->`Transcription mode`を使用します．
表示される`Transcription mode setting`ウィンドウで，書き起こし対象にする注釈層を選び，`適用`ボタンを押せば，ELANが書き起こし作業に最適化されます．

Transcription modeではショートカットキーが一部変更されます．ショートカットキー一覧ウィンドウの，`Transcription Mode`タブを確認してください．

## すでに定義してある注釈の位置や長さだけ変更したい
ファイルメニューの`オプション`->`Segmentation mode`を使用します．
（個人的には注釈モードに比較しそんなに優れていない気がするので使いませんが）

Segmentation modeではショートカットキーが一部変更されます．ショートカットキー一覧ウィンドウの，`Segmentation Mode`タブを確認してください．

## 注釈間に隙間が空かないように注釈付けしたい
言い換えると，n-1番目の注釈の終了時間とn番目の注釈の開始時間を一致させたい，ということになります．
機能としてサポートされているかは確認していません．
この要求を満たすためには，作業が少し面倒になりますが，n-1番目の注釈の終了時間を`Alt + ドラッグ`で移動させ，n番目の注釈に重なるようにした状態でドラッグを終了するとうまくいきます．
なにか良い方法はないだろうか．

## オーバーラップする複数の事象をアノテーションしたい
例えば，2人組ボーカルユニットの楽曲を，歌手ごとにアノテーションしたい場合．ハモったり重なったりすると，注釈層が一つではその状態をアノテーションできません．

その時は注釈層を増やしてください．
ファイルメニューの`注釈層`->`新規追加...`でウィンドウを開き，`注釈層名`を記入，`追加`を押下すれば注釈層が増えます．
![fig12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319806/f4bd190b-638b-d166-9221-c35c04f3cecc.png)
注釈層の名前が記述されているか箇所をダブルクリックすると，注釈層を選択できます．注釈の新規作成は，選択されている注釈層に対して実行されます．注意しましょう．

## センサデータと音声波形を対応させながら作業したい
`メタデータ`タブで可能です．

詳細は近いうちに記述します．

## テキストファイルをELANにインポートしたい
ファイルメニューの`ファイル`->`読み込み`->`カンマ区切り/タブ区切りファイル...`から．

## ちゃんと調べてないけどできる機能
* 複数の動画を同期した状態で再生できる
* 作業者の情報を持たせられる
* テロップが表示できる
* そのほかいろいろ

# おわりに
ELANの使用方法について毎年後輩に説明する作業が面倒になったので，この記事を書くことにしました．
ELAN自体はかなり高機能なので，すべての機能を使いこなしたい場合は，[公式のドキュメント](https://www.mpi.nl/corpus/html/elan/index.html)を見るとよいでしょう．

個人的なELANのしんどいポイントは，複数のeafファイルを一括でtxtに変換しにくいところだったりします．それについて自動化した話は次回気力があれば記事にします．

ちなみに，アノテーション作業は作業者の性格を歪めることで有名です．日常で会う性格悪い人はアノテーション作業の経験者であることは間違いないでしょう．自己紹介でした．