aviutilで半自動文字起こしテロップ
最近、有料の動画編集ソフト(adobe プレミアプロ)などでは、自動で音声を認識してテロップを作ってくれるそうです。
しかしながら月額料金が月払いだと5000円くらいと、 ちと高い。
大して動画を作らないし、動画で収益化も考えてない自分には、高い。
そこで、いにしえの動画編集ソフト(現役)のaviutilで、自動文字起こしができないかをやってみて、結構うまくいったので紹介します。
作った動画(おふざけ)
aviutilの自動文字起こしの流れ
①Google Cloudのspeech to textの APIを使って、文字起こしする。そのデータをCSVに書き出す。
②字幕の区切りを自由に選択できるようにUnityで作った編集システムにCSVを読み込む。
③Unity上で字幕の区切りをマウスで選択。
④Unityから、exoファイルというaviutilで字幕などのパーツを読み込めるファイルを生成。
⑤aviutilでexoファイルを読み込む。
⑥音声や動画と合わせて完了。
以下、詳しい解説とやっていて「ふーん」と思った点を書きます。
① Google Cloudのspeech to textの APIを使って、文字起こしする。そのデータをCSVに書き出す。
まず、speech to textの APIはこれです。https://cloud.google.com/speech-to-text/docs/reference/rest
文字起こしのAPIのエンドポイントが2種類あって
1分未満?の音声ファイルの場合 https://speech.googleapis.com/v1/speech:recognize(リファレンス)
1分以上?の音声ファイルの場合 https://speech.googleapis.com/v1/speech:longrunningrecognize (リファレンス)
みたいな感じです。
自分は、gas(google app script)を使って、グーグルスプレッドシート上でAPIをごちゃごちゃやりました。
長いファイルは、グーグルストレージサービス(バケット)にアップロードしてから、 「gs:// 」から始まるリンクでファイルを指定して、文字起こしをやってもらいました。
文字起こしで受け取ったデータはスプレッドシートに書きこみました。
今回は、文字データ以外にその単語がどの時間に発話され、どの時間に終了したかというデータも書き出しました。
1つの文字列の字幕のスタートと終わりを自動で設定するためです。
②字幕の区切りを自由に選択できるようにUnityで作った編集システムにCSVを読み込む。
文字起こしのデータをもらったは良いものの、単語ごとにスタートとエンドの時間が設定されているため、それのどこを1行の字幕にするのか、、という問題がありました。プレミアプロだと、文字列が出てきて、改行みたいな操作をすると、イイ感じに字幕が更新?改行されるようでしたので、何かしら、ユーザーが操作して字幕の具合を操作する必要があります。
UnityならGUIというかグラフィカルに操作するツールは作りやすいので、2日くらいで字幕選択ツールを作ってみました。
マウスで矩形選択すると、そのグループが字幕の1グループになるというツールです。単語ごとに時間のデータを持っているので、そのデータをもとに字幕の長さも自動で調整できます。
③Unity上で字幕の区切りをマウスで選択。
自作ツールで囲み囲みして、字幕設定を作ります。長いとクソ退屈ですね。もちろんセーブ機能も作ってます。
④Unityから、exoファイルというaviutilで字幕などのパーツを読み込めるファイルを生成。
字幕の区切り設定が完成したら、exoファイルというaviutilで読み込める編集データみたいなファイルを作ります。
構造としては、~~で、雰囲気はなんとなくわかりました。データを書き出すときにshift JISじゃないと、aviutilで読み込まれませんでした。
またテキストの部分だけ謎の数字の羅列だったんですが、暗号を解読したところ
UTF16の前部分2文字と後ろ部分2文字を入れ替えたものにケタ数が4096になるまで末尾に0をくっつけた物でした。
たとえば あを文字コード(Unicode?)にすると 12354 になるんですが、これを16進数にすると3042になります。
exoファイルでは、30 42を42 30のように加工して、けた数が4096になるまで0をくっつけると一つのテキストになりました。
例 はい → 例をここに書く
⑤aviutilでexoファイルを読み込む。
exoファイルをaviutil上で読み込みます。
⑥音声や動画と合わせて完了。
字幕の誤字やずれ、色とかをちょこちょこやって完了!
感想
自分で作ると、いろいろ勉強してないと無理ポな感じですね。
gas、js、グーグルクラウドAPI,Unity,C#,aviutilなどの事前知識が必要になってしまいました。
aviutilで自動字幕のプラグインが配布されているようなのでそっちを使ったら簡単そうです。