動画眼3 2.11.0をリリースしました

先日、AI書き起こしツールのWhisperとstable-tsを試し、その認識精度は実用レベルだなと感じました。

ただ気になったのは、書き起こしたテキストがPremiere Proに比べて細切れになる傾向がある点。文章や単語の途中でも切れまくっていいます。Whisperにはregroupというオプションがあるんですが、これを有効にしてもやや細切れのままなケースが散見されるので、もう少しオプションを詰めて行きたいと思いつつ、とりあえずの緊急措置として、動画眼3で取り込んだ後で、簡単にメモ(セル)を連結できるようにしました。

任意のメモを選択して、Ctrl+Fすると、直後のメモの内容を末尾に連結し、そのメモ行を削除します。MergeのMが使用済みだったのと、連続した押しやすさを考慮してFにしました。FusionのFとでも覚えてくださいw。

その他、細々とした使い勝手や不具合修繕も含んでいます。

最新版のダウンロードはこちらからどうぞ。

https://do-gugan.com/tools/do-gagan3/install.html

ショートカット一覧を作成

今回、操作ガイドとしてショートカット一覧を作成しました。動画眼3の「サポート」メニューから呼び出すことができます。

また表だけだと位置関係がわかりづらいので、再生操作系のショートカットを可視化するイラストも用意しました。文字ではピンとこないと思いますが、この当たりは運指のしやすさも含めてこだわっている部分なので、是非これでイメージを掴んで活用していただければと思います。

CtrlキーがAの左にあることを想定しているので、WindowsでCapsLockを使わずに遊ばせてる方は是非キーリマップツールを導入してCtrlキーとして使えるようにカスタマイズすることをオススメします(もちろんCtrlキーが左下のままでも使えます)。変更にはPowerToysCtrl2CapsなどどちらもMicrosoft謹製ツールです。

最近では、スイッチ切り替えでCapsLockをCtrkキーとして使用できるキーボードなんてのも登場しているようです。

より扱い易いWhisper派生ツールstable-tsを試す

前記事でWhisperというAI音声書き起こしツールを試し、これまで使用していたPremiere Proよりもかなり日本語文章として自然な結果が得られました。

その中でいくつか気になっていた、同じワードが反復して出てきてしまう現象について、VADという発話区間を識別する下処理をかけると良いのではという情報を発見しました。

標準では機械的に30秒ごとだかのセグメントを切って認識をしているところを、事前に声がある区間と無音区間または雑音の区間を切り分けて、発話のまとまりをしっかり識別してから処理にかけるという感じでしょうか。

VAD自体は一般的な処理の名称で、これまたAIで処理するSileroVADというツールが優秀っぽい。

そこで今回の記事ではSileroVADでの下処理→Whipserで書き起こしをまとめてやってくれるstable-tsというツールを試して見ることにしました。正式名称は「Stabilizing Timestamps for Whisper」みたいです。文章だけでなく単語レベルで正確なタイムスタンプを生成するのが主目的ぽいですが、その過程でSileroVADやWhisperも処理してくれます。

前回と同じくWindowsにPythonをセットアップし、pipでインストールしてコマンドラインから扱います。コマンドの構成はこんな感じ。

デフォルトで単語単位のタイムスタンプが有効なので、–word_level=Falseで無効にし、VAD処理をかけるため–vad=Trueを付加します。あとの言語やモデルの指定はバニラのWhisperと同じ感じ。

■結果比較

毎度の私のガジェットレビュー動画のサンプルです。

主にstable-tsとWhisperを見比べてみると、

  • Whisperで気になった短い語句の繰り返しがほぼなくなっている
  • 句点(。)がついている
  • ブロックが自然なところで区切られている

といった違いが顕著です。基本的にstable-tsの方が勝っている印象です。

またGPUのVRAM使用量もWhisperが13GBくらいだったのに対し、stable-tsは9GBくらいとコンパクトになっており、処理時間はバニラWhisperが16分の音声ファイルを5分40秒だったのに対しstable-tsは2分28秒。VAD処理をしているにも関わらず速いです。ちゃんと調べてないですがfast-whisperという小型軽量高速なフォークを使っているのかも知れません。これくらいならRTX4090のようなモンスター級のGPUがないゲーミングノートPC程度でもそれなりに実用的な速度で使用できそうです。

各ツールの製作者、コントリビューターの方々には感謝感謝です。

ローカルで書き起こしができるOpenAIのWhisperの精度をPremiere Proと比較してみる

UT/インタビュー調査の音声を書き起こして活用する際、案件の性質上、クラウドの書き起こしサービスは使えないことが多いです。そのため、従来はAdobe Premiere Proのローカル書き起こし機能を使っていました(競合のDaVinci Resolve Studioも最近ローカル書き起こしに対応したものの、タイムコード出力ができないっぽいので、拙作の動画眼3でインデックスとして使うには対象外となっています)。

Premiere Proの音声書き起こしは無料で使えるものの、残念ながら固有名詞の追加学習が行えません。UTでは機能名や画面名など固有名詞が頻出し、それが言及された箇所を検索したい場合が多いので、「ローカルで使え、かつ固有名詞学習ができる」書き起こしツールを渇望していました。

そこで見かけたのが、ChatGPTで有名なOpenAIが公開しているWhisperという書き起こし(ASR)ツールです。Webサービスとして有料で利用もできますが、ツールとモデルは公開されており、ローカル環境にインストールしてオフラインで無料で利用することもできます。また自分でモデルをトレーニングしてボキャブラリーを増やすこともできるようです。

昨年導入したRTX4090を搭載したWindows PCにインストールしてテストしてみました。

詳細なインストール方法は割愛しますが、Python環境があればインストールコマンド数行で導入できると思います。

また学習済みのモデルも大小様々な規模で公開されています。今回は最新で最大のlarge-v3を使ってみました。使用したPCはCPUがAMD Ryzen9/5900X、メインメモリ64GB、GPUがNVidia RTX4090(VRAM 24GB)のWindows 11機です。

■精度

動画と書き起こしデータをリンクして参照できる拙作「動画眼Lite」形式にして下記にサンプルを置いてみます。書き起こされたまま一切の修正を加えていません。

タイムコードの部分をクリックすると当該箇所が再生されるので、書き起こされた文章と実際の音声を比べてみてください。

以下はWhipserによる書き起こしのサンプルです。

まず大きく違うのは、1つのブロックの長さです。Whisperはかなり細切れで、1息の発話も分割されてる感じ。これはもしかしたらパラメーター次第でどうにかなるかも知れません。

あと気になるのは1:12~1:17のところで「で走行中にしか」が3回繰り返されてる点。ここ以外でも割とあちこちに同じ現象が出ています。もちろん実際に何度もこういう発話をしているわけではなく、エコーのようなものが発生しています。最初、STTシステムにありがちな音声の途中の変換候補のようなものが更新の度に書き出されているのかなと思いましたが、必ずしもそうでもなさそう。–best_ofという候補数の増減オプションがあるんですがいじってみてもあまり効果がなさそうでした。そもそも実際の発話は1:16辺りなのに、1:12と数秒早い段階で出現してるのも不思議。

そんなこんなはありつつも、全体的な精度はかなり優れているという印象です。読んでて文章として成立しないような箇所が少ない。またeSIMのような最近のワードがしっかり書き起こしできるのは好印象。PremiereだとESIMになってました。

■処理速度、使用リソース

コマンドラインオプションは最低限で、パラメーターはほぼデフォルトの状態で、16分の音声ファイルを5分40秒ほどで処理できました。3倍速くらい。

処理中のGPU使用率はこんな感じ。ほぼ100%張り付きで、VRAMは24GB中、コンスタントに13.2GBほど使用していたようです。16GB搭載の4080や4070Superでも実用になるかな?

■使用感

whisperに食わせられるのは音声ファイルなので、UTやインタビューの動画がソースファイルの場合、音声を分離してやる必要があります。今回はVLCを使って実施しました。ひと手間必要ですが、まぁVLCなら複数ファイルのバッチ処理もできるので、まぁいいかな。

mp4ファイルを直接食わせられました。

出力は字幕データによく使われるsrt形式で書き出しました。動画眼3はこの形式のインポートに対応しているので簡単に元動画ファイルとかけあわせて上記の動画眼Lite形式のデモが作成できます。

インストールが若干試行錯誤が必要でしたが、whisperコマンドが使えるところまできたら、あとはまぁ簡単かなという印象。パラメーターを詰めれば精度や速度が上がるかもですが、ちょろっといじった範囲ではデフォルトが一番正確に書き起こしてくれた気がします。

■単語学習(まだ難あり)

finetuningと呼ばれるモデルの再構築よりも手軽な方法として、優先使用したい語句をプロンプトとして与えてやるという方法があるようです。語句を半角スペースで区切って、

のように与えてやります。ただし、この記事によると、initialとあるように、最初のブロック(ウインドウ)30秒にしか反映されず、2ブロック目は1ブロック目の認識結果でプロンプトが上書きされてしまう仕様のようです。

これを、最初から最後まで強制的にinitial_promptの内容を適用させるプルリクエストが提案されています。transcribe.pyというPythonスクリプトに対する改変なので、こちらの差分を見て、最新版のtranscribe.pyをテキストエディタで開いて適用させてみました(ピンクの行を削除し、黄緑の行を追加する)。ちなみに自分の環境では対象ファイルはC:\Python311\Lib\site-packages\whisper\にありました。再コンパイルも不要でwhisper.exeから–always_use_initial_prompt Trueオプションが使えるようになりました。

最終的に使用しているコマンドラインオプションは、

といった感じです。

ただ結果は微妙で、確かに誤認識していた箇所がプロンプトに加えた単語に置き換わってくれた箇所もあるんですが、逆に全然関係ないところでもその単語に引かれてみたり、しかも”トヨタ 日産 ホンダ”というプロンプトにしたら、「トヨタ 日産 ホンダ」というセグメントが大量に出現したりしました。もうちょっと研究が必要そうです。

やはり精度をあげるにはモデル自体を再トレーニングしないとダメかも知れません。

■まとめ

それなりの性能のPCが必要なものの、ローカルで実行でき、簡易的な単語追加も行えるOpenAIのWhisperを試してみました。

まだ色々パラメーターをいじったり、Pythonスクリプトで自動化やカスタマイズをする余地はありまsくりですが、とりあえずコマンドプロンプトでもPremiere Proよりもかなり「読める」書き起こしをしてくれるので、今後業務データを作る際にはこちらを使おうかなと思います。

2024.1.17追記:更に高速軽量で精度も高い関連ツールstable-tsを試しました。下記記事もあわせてご覧下さい。

動画眼3 2.10.3をリリース(不具合修正)

動画眼3にバグを見つけたので修正版をリリースしました。

https://do-gugan.com/tools/do-gagan3/install.html

Premiere ProのAI書き起こしデータをインポートできなくなる不具合で、以前一瞬だけ書き起こし時のタイムコードの区切りが「;」になっていた気がしたので2.10.1で対応してあったのですが、あらためて最新版をみると「:」に戻ってました。なんだったんだろう。夢?

対応したのが随分前でそのままPremiereが何度かアップデートしてたのに検証しきれていませんでした。該当機能をご利用の方にはご迷惑をおかけしました。

RODE Wireless Pro用のネックストラップハンガーを作成

UT/インタビューで2人の音声を明瞭に収録するのに、RODE Wireless GOシリーズのような小型ワイヤレスマイクは重宝します。ただUTやインタビュー調査のように参加者が入れ替わり立ち替わりして、かつセッテイング時間もない、服装も様々、という場面では、クリップやマグネットで衣服に固定しづらいことも。

そこで、当サイトでは3Dプリンターでネックストラップにとりつけられるハンガーを設計して活用していました。直接クリップ部分にヒモをひっかけるよりも姿勢が安定し、マイクが常に上(口元)を向きやすいメリットがあります。

ハンガーを使ってストラップに吊り下げた様子

しかし、2023年秋に発売されたRODE Wireless Proでは専用の充電ケースが付属しており、このハンガーパーツと相性問題が発生しました。

ハンガーが干渉して充電スロットに刺さらない

7時間程度保つというカタログスペックですが、慎重を期して60~90分のUTセッション毎に充電しておこうと思うと、都度ハンガーを付け外しする手間はばかになりません。

そこでWireless Pro充電ケース対応の新しいハンガーを再設計することにしました。

完成したPro用ハンガーがこちら。

RODE Wireless Goシリーズでは別売りだったマグネットがProでは標準で付属していますので、これを活用するスタイルです。今回はスマホケースなどで使われる柔らかいTPU素材で出力してみました。マグネットを固定する仕掛けが最低限なので、より摩擦が大きく外れにくいことを期待しています。

実際にとりつけたのがこちら。本体側上部が一応引っ抱えるようになっているので、見た目よりはスッポ抜けにくくなっています。普通にブラブラ振り回すくらいでは外れなさそうです。

Proケース対応の新ハンガーをMagClip Goマグネットにとりつけた様子

そして問題の充電ケースですが、こんな感じで収まります。

充電ケースにセットした様子

送信機のスロットはセンターと左側です。センターはそのまま刺さりました。左側も外周のフレームが干渉してしまいマグネットがズレるものの刺さります。実用上は問題なさそう。そもそもマグネットなので最悪付け外ししても手間はほぼありません。

ちなみに受信機も同じ形状ですが、ネックストラップで吊る必要はないと思うのでここでは考えないことにします。右の受信機とセンターの送信機の隙間はギリギリなのでつけたままセットするのは無理っぽいです。

これでストレスなく実査中に充電ができそうです。

こちらのハンガーを使ってみたいという方で、3Dプリンターをお持ちの方は以下のSTLファイルをご自由にご利用ください。また自身で出力できる環境がないが欲しい!という方がいらっしゃいましたらコメントからお問い合わせください。送料実費くらいで頒布いたします。

こちらのストラップで検証しております。

ソニック ストラップ 多機能 丸ひも ストラップ 青 MH-223-B

ソニック ストラップ 多機能 丸ひも ストラップ 青 MH-223-B

354円(05/05 19:09時点)
Amazonの情報を掲載しています