最新AndroidからキャストできないReflector4に代わるソフトを探す

ユーザーテスト案件で、iPhoneとAndroidの画面キャプチャを録画/配信する機会があり、久しぶりにReflector4を使おうとしたのですが、なぜかAndroid14の端末からキャストできなくなっていました。複数の端末でテストし、他のGoogle NestHubなどには普通にキャストできているので、なにかしらReflector4側が最新Androidにキャッチアップできてないのかも知れません。ちなみに同じくらい老舗のAirServerもダメでした。

さて困ったぞということで代替ツールを探してみました。結果として見つけたのがApowersoftのApowerMirrorというツール。もう一つほぼ同じ仕様、価格のツールもありましたが、こちらの方が若干遅延が少ない気がしたのと、Reflector4のようにPC側でスマホっぽいフレームを付加できた点でこちらを選びました。

OS内蔵のUIからもキャストできましたが、専用アプリをスマホにインストールした方が手早くホストPCをネットワーク上から検索してキャストを開始できました。またホストPCアプリにQRコードを表示して、スマホアプリでそれを写して接続することもできます。切断状態からキャスト開始までの手順がアプリを使った方が手早い印象なので、素直に使っておくのが吉かなと思います。

無料は低画質720pモード+透かし有り+10分までなので、実務で使うには実質有料プラン一択です。買い切りの価格はReflector4に比べると3,4倍するので、年に数回しか使わない私は当面月額サブスクリプションを当月毎に使用することにしました。そうしてるうちにReflectorの方がアップデートして使えるようになるかなという期待も含め。

解約方法メモ

ちなみに課金はpaddle.comというソフトウェアの請求プラットフォームを経由していて、解約手続きはちょっとわかりにくかったです。paddle.netへアクセスし、「Look up my purchase」(私の購入履歴)をクリックしてメールアドレスを入力。そうするとhelp@paddle.comから「Verify your email」というタイトルのメールが届くので、その文中にある「Verify and show purchases」というボタンをクリック。するとサイトに戻って購入履歴一覧が出てきます。ApowerMirrorの履歴が見付かると思いますが解約などのリンクは見当たりません。

そこで右の「Get Help」を押すとチャットボットが開くので「Cancel subscription」(購読を解除)と打つと購読解除のリンクを返してくれて、そこから解約できました。

■まとめ

今時、OS標準ツールでiPhone -> MacやAndroid -> Windowsなどでスクリーンキャストする方法は色々ありますが、セッション(参加者)毎にiPhone/Androidが入れ替わり、かつそれをOBS Studioに取り込むといったことまで考えると、単一のツールで管理できた方が楽でしょう。その意味ではこうした汎用ツールもまだまだ有用と言えます。

$40程度で買い切りできるReflectorはまだまだ価格優位性があるので、どうにかAndroid14以降も使えるようになっていってほしいものです。4が出てだいぶ経つのでそろそろ5とかに有償アップデートでもいいので。

UTの回顧法用に画面遷移スライドショーを簡単に作る

ユーザーテストでタスク完了後などにふり返りでインタビューをしますが、その時により記憶を鮮明にしながら振り返ってもらうために各画面をもう一度見せたいことがあります。しかし、ECサイトの申し込みフォーム等だとブラウザのバックでは単純に戻れなかったりしますし、最初から辿ると再入力などでもたつきがちです。

そこであらかじめスクリーンショットを用意してスライドショーで見せたりするわけですが、それにもいくつかハードルがあります。例えば縦に長いスクショ画像を一般的な画像ビューワーで表示すると、大抵は画像全体がウインドウに収まるように表示されてものすごく細長~い状態になったりします。それを適切なサイズにズームさせなければなりません。また参加者の目の前にあるタスクに使ったPCをモデレーターが別席から操作するのにマウスだけですべてのオペレーションをしたいのに、例えばWindows標準の「フォト」アプリなどは画像の切り替えがキーボードの左右カーソルキーでしかできません。また理想の画像ビューワーがあっても、クライアントのPCに許可無くインストールできなかったりすることもしばしば。

というわけで、理想の回顧法向け画面遷移スライドショーができるスクリプトをHTML + JavaScriptで作ることにしました。HTML + JSならインストール不要でブラウザで開くだけです。作るというか、ほぼほぼGitHub Copilotに希望を伝えて作ってもらったというのが正しい。生成AIスゴい!何度か追加プロンプトを入れて書き直してもらいましたが、直接書いた行は1割もない気がします。

■設定した要求仕様

  • マウス左クリックで次、右クリックで前の画像を表示する
  • 幅を固定で表示し、縦にはみ出る分はホイールでスクロール
  • 初期位置は画像の一番上(ファーストビュー)を表示

基本的にこれだけ(以外とこれができる画像ビューワーがない!)。

本当はフォルダ内の画像ファイルリストを自動的に取得して先頭から順に表示するようにしたかったんですが、ブラウザのセキュリティ仕様的にJavaScriptでローカルフォルダをスキャンすることは不可能だったので諦めました。Node.jsのようなフレームワークを使い始めると受け渡しが煩雑になってしまい本末転倒になってしまうので。

■完成したコード例

index.html (HTMLファイル)

const images = {}; の中に画像ファイルを列挙します。”で囲って、最後に,をつけてください。必要な数だけ増減OKです。このhtmlファイルがあるディレクトリに画像ファイルを置く場合の例です。例えば「画像」というサブフォルダに入れるなら、

styles.css (スタイルシートファイル)

ポイントとしては、6行目のbackground-colorを変更すると、ウインドウの余白部分の色がかわります。実際にそのサイトでウインドウを幅広くした時の背景色にあわせるとより本物っぽく見えるでしょう。

もうひとつ重要なのが18行目のmax-widthの値です。単純に100%とかだとウインドウ幅一杯に広がってしまうので、なんらか実際の表示にスケールを固定したいです。画像キャプチャに使うツールにもよりますが、今時のディスプレイは画像のピクセル数と表示サイズが1:1ではありません。例えば画像ファイルの横ピクセル数が1763pxでした。これをそのままmax-widthにいれると実際より大きく表示される場合があります。これは例えばWindowsならディスプレイ設定画面の「拡大/縮小」設定値に応じて調整する必要があります。写真のように150%だった場合、1.5倍に拡大されているので、max-widthには1763を1.5で割った数値を指定します。

script.js (JavaScriptファイル)

このファイルは基本的にいじらなくて大丈夫です。当初最後のファイルで左クリックすると最初の画像にループする仕様でしたが、連打しがちなのであえてループしないよう修正してもらいました。

画像キャプチャのコツ

後は画像を用意するだけですが、注意するのは毎回同じ幅でキャプチャすることです。縦の長さはバラバラでもスクロールするので構いませんが、横が違うと表示サイズが大きくなったり小さくなったりして見栄えが悪いです。

なので、毎回矩形範囲指定するようなキャプチャーツール/機能(macOSのShift + Command + 4とか)だととてつもなく面倒です。ウインドウ範囲や繰り返し同じ範囲をキャプチャしてくれ、なおかつ連番でファイル名をふって保存してくれると良いです。Windowsだと古くはWinShot辺りでしょうか。Windows11で動くかわかりませんが…

Webサイトの場合、オススメなのはFireShotという拡張機能です。

  • 長いページを自動でスクロールさせて連続キャプチャし、1枚の長い画像につなげてくれる
  • 今みえている範囲だけのキャプチャも可能
  • ファイル名の初期値を日付や連番など柔軟に設定できる
  • 開発者モードでスマホ表示にしていても使える
  • 有料版もあるが無料版で基本的に充分事足りる

といった特長があります。今回のようなスライドショーを作る以外でも普通に便利です。

■まとめ

マウス完結で簡単に画面遷移スライドショーができるツールをHTML/JavaScript/CSSだけで作成しました。アプリインストール不要でローカルファイルで実行できますし、ブラウザ内で表示されるので、Webサイトのキャプチャなどはそれなりにリアルに提示できます。参加者とモデレーターがそれぞれマウスを持っていれば互いに「ここが~」などとポイントしつつページを行き来できるのも便利だと思います。

そのままWebサイトにアップしてURLを共有すれば誰かに見せるということもそのままできます。リモートUTなどでは遠隔の参加者にアクセスしてもらい、Zoomのリモートコントロールで双方が操作することは可能そうですね。

是非お役立てください。

RODE Wireless Pro用ネックストラップハンガー Ver3

RODEのクリップ型ワイヤレスマイクWireless Proをユーザーテスト/インタビュー案件で使用する際、色々な服装の参加者が入れ替わりいらっしゃるので、Tシャツのようなクリップ止めできる胸ポケットも合わせもない服装の方でも対応できるようネックストラップにぶら下げるということをしています。マイクがきちんと上を向いてぶら下がるようにするのに3Dプリンターでハンガーを作っていました。

最初期のバージョンがこちら。前モデルのWireless Goシリーズ向けに制作したもの。

その後に発売されたWireless Proでは本体形状こそほぼ同一なものの、専用充電ケースが付属するようになり、上記ハンガーを取り付けたままではこのケースに収納できなくなり、改良したのがこちら。

今回、あらためてイチから見直しマグネットも不要で簡単に脱着でき、よりしっかりと固定できるようにしたのがVer.3です。

クリップ部分に下から差し込むだけ。上のリングにストラップの紐を通して使います。

この通り、装着したままでも充電ケースにばっちり収まります。

今後4人のグループインタビュー案件を担当する用に1セット追加購入して2ペア4台になったので、せっかくなので色分けしてみました。今導入を迷っているこちらのミキサー兼オーディオI/F ZOOM PodTrak P8のカラーコードに沿って、CH.1~4の色で赤、オレンジ、黄色、緑となっています。(もしかするとCH.1はピンク?)。

更にこの4色を含むこちらのネックストラップも注文済み。

残念ながら長さ調整機構がないので、セリアで別途コードストッパーも買っています。

これで視覚的にも鮮やかでわかりやすいマイク環境が整いそうです。

こちらのRODE Wireless Pro用ネックストラップハンガーを御所望の方がいらっしゃいましたらコメント等でお知らせください。個数にもよりますが500円/個程度で頒布いたします。

現物確認できていませんが、おそらくWireless GO/II、Meでも使用できると思います。

メーカーの違う2.4GHzワイヤレスマイクを混在させると混信以外のところでハマるかも?

先日参加者4名のグループインタビューをお手伝いしました。私がモデレーターとして入って計5名の音声をZoomで中継する形です。先方には同時通訳者が入ってクライアントが聞く、という座組です。

当初、レンタルインタビュールーム備え付けのバウンダリーマイク(卓上置きマイク)で事足りると中間クライアントは考えていたのですが、エンドクライアントは各個人へのピンマイク装着を希望。テストをしてみてダメだったら私がワイヤレスマイクを4台持ち込みましょう、ということになりました。

で、案の定やはりピンマイク(個人別マイク)だよねということになったのですが、こちらも少しハマったので覚え書き。

セットアップとしては手持ちのRODE Wireless ProとHollyland Lark Max DuoをMacBook Proに接続し、モデレーター用としてMacBook Proの内蔵マイクとあわせてAudio Hijackを使ってソフトウェア上でミックスしてLoopbackの仮想オーディオデバイス経由でZoomのマイク入力として入れる、ということをしました。

同じ2.4GHz帯を使うデジタル通信を使う製品なので同じ部屋で使うと混信して途切れたりが心配でしたが、それはまぁ一応大丈夫そうでした。しかしエンドクライアントというか同時通訳者の方から「ハウリング(エコー)して聞きづらい」と言われてしまいます。当初バックヤード側の設定ミスで会場備え付けのマイク音声がZoomに載ってたりして少しずつ改善はしていったんですが、やはり2組のワイヤレスマイクを全てオンにするとエコーすると。一旦は2組4台を使うのを諦めて、1組2台を2人ペアの真ん中に置いてしのいでいたのですが、それはそれでやはり声が小さい(遠い)と言われるので、休憩時間になんとかできないかと試行錯誤。

■デジタルワイヤレスマイクは機種毎に遅延時間に結構差がある!

結果として問題だったのは各機種固有の遅延時間でした。Wireless ProとLark Max Duoとで音声の伝送時間に差があり、結果的にMacに入力される声がズレるのでエコーのようになってしまうというわけです。基本的には1人1人の口元で音を拾うわけですが、多少の漏話(隣の人の声を拾ってしまう)がある距離だったというのもあります。

そこでAudio Hijack上で「Delay」ブロックを使って、タイミングを補正してやることで解決できました。

以下のスクショが実際に使用したAudio Hijackのレシピです。

3系統のマイク(左端上からLark Max Duo、Wireless Pro、内蔵マイク)のうち、もっとも遅延が大きいのがLark Max Duoでした。厳密に録音して波形をみて合わせるまではせず、モニターイヤホンで声や拍手を聴いて感覚であわせた限りですが、Wireless Proに80msの遅延をかけてやっとLark Max Duoとのズレがなくなった感じです。同様に(あまり遅れなさそうな)内蔵マイクにも50ms遅延を入れています。

ついでに説明すると、Wireless Proの音声は「Volume」ブロックで200%に上げたあとでMixerブロックに送っています。それを(別売り製品である)RX10のVoice De-noiseフィルターで部屋の空調ノイズなどを提言し、最終的に更に音量をあげてLoopDeckの仮想音声デバイスである「UT Mic」に送っています。Zoomのマイク選択リストにこの「UT Mic」が見える感じ。

フィルターを入れれば入れるほどその処理遅延は大きくなり最終的に映像とのズレが出てきてしまうので、あまり多くはいれない方が吉なんですが、Zoom側のノイズ除去との兼ね合いも測りつつ、こんな感じでやっていました。

その後気になって調べてみたんですが、こちらのNote記事に定量的に検証してくださった結果が載っていました。

https://note.com/ocdp10ply/n/n02b9cce5e45c

Hollylandからの出走者はLark Duo Maxではなくより新しいLark M2ですが、やはりWireless Proよりは遅延が大きい。さらに安価なBOYA製品はもっとヒドい、という結果だったようです。大変参考になりました。やはりTx側でデジタルエンコードしてRxでデコードするというプロセルが生じる以上、プロセッサの処理能力が如実に出るという感じでしょうか。最近のLarkはノイズキャンセル機能もあるので、そちらも負荷として遅延原因になり得るのかも知れません。またRODEが全般に優秀なのか特に上位モデルのWireless Pro故の結果なのかも気になります。

実はまた来月同じく5名の音声をミックスする案件があるんですが、Lark Max Duoは引退させてWireless Proをもう1組買うか借りるかしようかなと思案中です。というのも前回は自分のMacBook Pro+ Audio Hijackで帳尻を合わせられたんですが、次回は別のモデレーターが使用する場面があるんですよね。なのでPCに入れる前の状態でハードウェア処理で遅延まで解決している必要があります。

なので最近使ってなかった6chミキサー+オーディオI/FのZOOM F6を起こしてきてワイヤレスマイク4台+固定マイク1台を入れてやろうかと。これなら本体前面のフェーダーツマミを別個にひねるだけでバランス調節ができます。ただF6内蔵のディレイは30msまでなのでLark Duo Maxだと厳しい可能性があります。

ZOOM ズーム 32bitフロート録音対応 6chフィールドレコーダー F6

ZOOM ズーム 32bitフロート録音対応 6chフィールドレコーダー F6

71,455円(12/22 09:58時点)
Amazonの情報を掲載しています

■Auditionで追加検証

あらためてF6で検証してみました。マルチトラックでAdobe Auditionで録音した結果がこちら。拍手の瞬間を撮ったもので、上から

  • RODE Wireless Pro(緑)
  • Hollyland Lark Max Duo(紫)
  • XLR有線入力のマイク(黄色)
  • LRにミックスしたトラック(青)

という感じ。それぞれ記事執筆時点の最新ファームウェアを入れています。

やはり紫のLark Max Duoが明らかに遅く、Wireless Proは有線マイクとの中間という感じ。ピークの瞬間を速い方からタイムコードでみると、有線 0.962s、Wireless Pro 0.970s、Lark Max Duo 0.984sという感じなので、遅延量でいうと

  • Wireless Pro: 8ms
  • Lark Max Duo: 22ms

で、ワイヤレス同士で14msのズレがあるという感じですね。上記noteの記事の値とほぼ一致する結果となりました。

これくらいズレがあると、耳で聞いても拍手がパン!ではなくパララ!と複数人が「せぇの」で叩いたかなって聞こえ方になります。これで何言ってるかわからないくらい聞きづらいかっていうと微妙なところではありますが、やはり長時間集中して聞いたり、同時通訳しないといけないといった時にはこの差が疲労となってのしかかってくるんじゃないかと。

このミームと化している画像を貼らせていただきたい。

逆算してWireless Proに14ms、XLRマイクに22msの遅延をいれてやると波形もほぼ揃い違和感はなくなりました。拍手が乾いた「パン!」になります。F6のトラック別ディレイは30msまでですがなんとかその範囲で調整できたので良かったです。60msとか遅れるBOYAでは厳しかったところです。

■まとめ

互いの声を拾わないような距離の状況なら漏話リスクも少ないんでしょうが、静かなインタビュールームでテーブルを囲んで、みたいな状況だとこの遅延が致命的なエコーにつながる可能性があります。

そんな状況で複数のマイク、特に2.4GHzデジタルワイヤレスマイクを組み合わせて使う時はできるだけ機種を揃えましょう(同一機種で混線しないかという懸念もありますが、むしろメーカー側で検証して推奨台数なども出してれば安心かなというのと、実際に混線が問題になったことはないので、現時点では機種を揃える方がメリットは大きそう)。

遅延の大きい安価な製品でもむしろそれで同士で組み合わせて他を混ぜないなら問題は小さいかも知れません。

そしてとりあえず予算が許すならRODE Wireless Proは低遅延さでもかなり優秀らしいぞと。完全遅延無しの業務用のB帯アナログワイヤレスマイクよりはお安い。ただノイズキャンセル機能がないので、PC側やZoom側でなんとかする必要はあるかも知れません。

また今回は5マイクなのでたぶん買わないと思いますが最大4chで足りるのであれば、マイク子機4台の製品も見つけました。

これの遅延具合は不明ですが、この4台で完結する分には問題ないでしょうし、ノイズキャンセルもあるみたいで、それでいて4台で4万円はなかなかコスパヨサゲです。ただマイク個別の音量調節ができるか明記されてないのでできない気も。できたとしても小さい送信機の画面と少ないボタンを駆使して操作するのはインタビュー実査中にするのは厳しいかも知れません。

ワイヤレスマイクのレシーバーを見やすい角度で保持できるスタンドを自作

みなさん、小型ワイヤレスマイク使っていますか?Rode Wireless Go辺りから始まったバッジ型(?)小型ワイヤレスマイクの潮流は、ユーザーテストや1on1のインタビューでとても手軽に良質な音声収録を可能にし、かつマイク本体に録音もできる機種であればバックアップ録音や、事後の音量バランス調節なども行える保険として有益です。

私もこの辺りを実際に現場に投入して一長一短ありつつも便利に使っています。

されこれらのマイクの共通の特徴として、マイク子機(トランスミッター)2台とPCやビデオカメラに有線でつなぐ親機(レシーバー)から成り立っています。レシーバーにはリアルタイムの音量(レベル)やバッテリー残量など重要な情報が表示されています。これをごちゃつきがちなモデレーターのデスクに見やすい位置に置いて、ステータス確認したい時にat a glance(チラ見)でチェックできるようにしておきたい、というのが本記事のトライアルです。

これらのレシーバーは軽量な上に背面や底面にカメラのコールドシュー(ストロボを取り付けるレール)につけるクリップがついていて、安定性がよろしくない。カメラの上にとりつける時はありがたいスタンドが、安定悪くしていて机の上に置いておくとケーブルに引っ張られたりしてすぐにクルクル明後日の方を向き出してしまいます。また仮に自分向きに置けたとしても、RODE製品は上面、DJIやHollylandはフロント面にディスプレイが来るので、覗き込むなりしないと見えなくて微妙なストレス!

これを解決するスタンドを3Dプリンターで自作してみました。その完成品がこちら!

「コールドシューを斜めにしただけの台~」(CV.のぶ代)

RODE型のレシーバーは下から差し込むようにつけます。

RODE Wireless Pro取り付け例

DJI/Hollylandのように薄い面がモニタの機種は台を180度逆向きにして差し込みます。

Hollyland Lark Max取り付け例

PCにUSBケーブルでつないで脇に置いておけば安心です。ままでクリップでそのケーブルに挟んで固定してたりしましたが、それだと下を向いちゃったりでいまひとつでずっと気になってたんですよね、、

なおコールドシューのパーツはRemix OKで公開くださっていた拾いものをベースに、両側から刺さるように改造した上で流用させていただいています。

さらに3DプリントのPLA素材なんてスカスカで軽いのでちょっとなにかにぶつかっただけで動いてしまいます。そこで、テテーン!

底に穴をあけてジンバル用のウェイトを入れてみました。

買うとちょっと高いですが、前に別のことで買って使わなくなっていたものを流用。これでズッシリさあが増して動くにくくなった気がします。さらに底に滑り止めのシートも貼ってみてもいいかも知れません。これがぴったり刺さる穴径がなかなか作れなくて三度目の正直でやっとピタっとはまりました。手ではもう抜けません、、必要なら三脚ネジになにかネジこんで引っ張るとかすればいいかも。

stlファイル置いておきます。ほしいという奇特な方はどうぞ。利用せていただいたコールドシューパーツのライセンスが改変OK、商用NGなので直接の販売はできません、送料実費くらいでならどうだろ…まぁいざとなればもっと緩いライセンスの部品をくっつけなおすだけなんですが。

今回利用した元パーツもクレジットせねばなりません。こちらの作品です。Ratasichさんありがとう。

そして再頒布は同じ条件で公開しなければならないので、ご利用になる方は以下をお願いいたします。クリエイティブコモンズライセンスのBY-NC-SA 4.0 DEEDです。

  • 再頒布、改変はOK
  • 元製作者のクレジット必須
  • 商用不可

■市販品で作る

今回の計画段階で、ありものを組み合わせるだけでも近いものはできるなと思いました。

コールドシュー部品はこれがおすすめ。両側から差し込めます。三脚ネジ互換のネジも付属しています。

これを何か小さめのミニ三脚に装着するだけです。三脚側もネジが出ているのが多いので、メス-メスのアダプタ。

あとは向きが変えられる雲台がついたミニ三脚ですね(もしくは三脚+雲台)ですね。個人的にはあまり背が高くなりすぎず、値段もそこそこに抑えるとこんなんかなぁ。

百均とかにいけばなんかあるかも。個人的には「これ!」ってのがなくて「作っちゃえ」となりました。結果的にフットプリントが小さくできたので、色々なものがあって渋滞しがちなモデレーター、オペレーターのデスクで邪魔にならなくていいんじゃないかなと思います。

動画眼3のVer 2.12.1を公開しました

GitHubのリリースはこちらです。

https://github.com/do-gugan/do-gagan_electron/releases/tag/2.12.1

今回はバグ修正以外にいくつか機能改善や変更も含んでいます。

再生ステータス表示

まず再生中にスキップや速度変更、一時停止、画面キャプチャをした際に映像フレームの右上にステータス表示(アイコン、文字)を表示するようにしました。キーボードショートカットで不意に速度がかわったりしてると気付きにくいので。右上というのがこだわり。昨今の動画サイトやアプリは一時停止とかスキップボタンをデカデカをコンテンツのど真ん中に出すのがデ・ファクトになっていて異を唱えたかった。普通に考えて邪魔でしょと。小さい画面でタッチ操作するスマホはまだわからなくもないけれど、画面全体の輝度を落とすのもいらない。一時停止って視聴を止めるってだけでなく映像をしっかり確認したい、って場面もあると思うんですよね。そういう時に邪魔をするUIはいらない。一時停止してまっせ、ということだけが伝われば良い。てなことでスタータス表示は右上に控えめに。ブラックアウトももちろんなし。技術がないとか面倒だったとかじゃないんだからねっ!

キーボードショートカットの変更

次に大きな変更としては、前後ジャンプのショートカットキー割り付けを変更しました。従来のCtrl + W/Qに慣れてらっしゃる方がいらしたら申し訳ないですが、まぁたぶん世間の誰も使ってないから大丈夫だろうと…

変更意図はこちらの図をみるとわかっていただけるかと思います。

こちらが変更前。

そして下が変更後です。

もともと動画眼3でCtrl + WとQがペアで前後だったところにEを追加。更に下段に速度制御系をいれて、ほぼ同じ動作をするCtrl + EとCtrl + Sがズレてるのがわかりにくいなとなりました。

ちなみに速度制御系はPremiere Proなどで一般的なJ/K/Lキーでも行えます。ただモディファイアキー無しは文字入力中などには使えないので、別途Ctrlを使い、左手一本で扱い易い位置としてCtrl + A/S/Dをもってきたという経緯です。ただここはもともとWindowsでは全選択や上書き保存に使われてたりするので悩みましたが、本ツールにおいての操作性を優先してみました。上書き保存はShift +Ctrl + Sとちと面倒になってますが、定期自動保存もあるしな、と。

あとCtrl + Q/EはShiftを押しながらだとn倍ジャンプするんですが(何倍かは設定画面で指定)、macOS + ATOKではShift + Ctrl + Eで単語登録ウインドウが開いてしまうようです。自分は必要ないのでATOK側でアサインを変更しようと思います。

このように特定環境や習慣とバッテイングするのも問題なので、将来的には有効無効を切り替えたりカスタマイズできるようにしたいなとは思いますが、まぁ現状自分以外に利用者いなさそうだし優先度低め。

動画眼Liteの方も近日中に新アサインに更新予定です。

ログ・インポート時のダイアログの挙動変更

動画眼上で作成した.dggn.txt形式ファイル以外のデータで読み込めるのは、csv、srt、そして旧動画眼形式の.txtですが、インポートするファイルを指定するダイアログで拡張子による絞り込みのプルダウンメニューがありました。自分は最近Whisperで生成したsrt形式を使うことが多く、毎回プルダウンの一番下を選ぶのが面倒になってきました。最後に使った形式を記憶しておいてデフォルトでそれが選択された状態にできないかと思ったんですが、APIの仕様上、HTMLのselectタグのselectedのような指定はできなそうで、順序を一番上に持ってくるしかないとのこと。プルダウンの順番がコロコロかわるのもなんだなということで、デフォルト(一番目の選択肢)は.txt、.csv、.srtがすべて選べる状態にしました。フォルダ内にファイルが多すぎる時だけプルダウンで絞り込んでね、という形。macOSの場合、この拡張子セレクタはボタンを1つ押さないと出現しなくてさらに手間だし気付かれないこともあると思うので、その意味でも良い変更なんじゃないかと。

まだまだ改善中ですがよろしかったらお試しください。

動画眼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が何度かアップデートしてたのに検証しきれていませんでした。該当機能をご利用の方にはご迷惑をおかけしました。