FFTranslate

Mac用のオフライン文字起こしアプリケーション「FFTrans」のユーティリティ第1弾として、オフライン翻訳アプリケーション「FFTranslate」を開発しました。

FFTransで文字起こししても、元の音声が外国語の場合、そのままでは読んだり、字幕として動画に付けても把握しづらいですよね。
それだけなら一般的な翻訳ツールでも翻訳は一応可能ですが、国際会議で多言語が混じった状態だったりすると一行ずつ翻訳しなくてはならず、さらにタイムラインが壊れたり、長すぎて全文翻訳できなかったりと意外と面倒です。

もちろん、文字起こし同様、プライバシーやセキュリティの課題も残ります。
そこで、FFTranslateはM1/M2/M3チップを搭載した最新のMacに組み込まれているNeural Engineを利用し、翻訳処理をオフラインで、迅速かつセキュアに実行できます。
辞書も全てOS側でダウンロードされたものを使用しますので、アプリ自体もコンパクトにできました。

字幕ファイルを読み込んだら、翻訳したい言語を選んで翻訳ボタンを押すだけで翻訳されます。
字幕のソース言語は明示的に指定することもできますが、自動を選択しておけばタイムラインや話者ごとに自動判別され、ターゲット言語に翻訳されます。
なお、自動判別の場合は翻訳中に辞書のダウンロードは自動実行されませんので、辞書が未ダウンロードの言語部分だけ原文のままとなります。

翻訳速度はマシン性能によりますが、34分740ブロックの字幕(57KBほどのテキスト)で25秒ほど、54分878ブロックの字幕ファイル(50KBほどのテキスト)で30秒ほどで完了します。
多少の速度差はあるかと思いますが、概ね50倍速くらいでは処理可能です。
字幕内に複数の言語が混じっていても処理速度はほとんど変わりません。
CPUは100%(1コア分)、メモリはアプリ本体は70MB程度でほとんど消費せず、ニューラルエンジンの処理に1GB程度消費するようです。

ちなみに字幕は画面で見やすいように細かく分割されていたり、FFTransでも話者の区切りに応じて短めになったりしがちです。
それをそのままタイムラインごとに翻訳するだけでは、不自然な字幕になりがちです。

そこで、FFTranslateはSRT字幕の構造を理解し、より自然な翻訳結果を得る工夫をいくつか施しています。

そのひとつが「結合最大間隔」を使ったタイムラインの結合です。
SRTのタイムラインを参照し、指定したギャップ未満のブロックを読点まで、内部で連結してから翻訳します。
そして翻訳後、改めて句読点を参考にタイムラインに分割して展開します。
これにより、文脈が途切れることなく、より自然な文章として翻訳されます。
(結合許容秒は0.0~2.0秒の間でカスタマイズ可能です。)

この処理はFFTransの話者分離が実施されていた場合、同一話者内のみで結合されますので、別の人の会話が混じることはありません。
翻訳言語についても同様で、短い文章で言語識別できない場合も同一話者の以前の識別言語を保持して翻訳するため、翻訳精度を維持することができています。

話者分離がされていないSRTファイルについても可能な限り対応していますが、文の結合精度がどうしても下がります。
またSRTの形式はかなり自由度が高いので、基本的にはFFTransで生成したSRTファイルが対象とお考えください。
それでもBOM付きや複数行の本文、改行コード(CR+LF)には対応させています。
なお、Shift-JISやEUCなどはほとんど使われていないはずで、意図せぬ文字化けを避けるため、非対応としています。

前述のようにFFTranslateはFFTransのユーティリティとして開発したものではありますが、語学学習者の方や、大量の動画を扱うクリエイターの方にも有用かと思います。
App Storeでの配信についてはまだ正式に決定していませんが、有償販売を検討中です。
まずはTestFlightから実施していますので、まずは一度、FFTranslateの快適さと安心感を体験してみてください。

(10/23 11:44追記)
Store審査対応でVersion 1.1としました。
修正内容は以下の通りです。

・Apple Silicon専用でビルド
・Entitlementの不要項目削除
・アプリ初期表示時点で選択言語のダウンロードを促す処理を追加
・字幕読み込み時点で選択言語のダウンロードを促す処理を追加
・未翻訳ブロックがある場合、保存前に確認ダイアログ表示を追加
・翻訳字幕中の未翻訳ブロック数がある場合、字幕ブロック数と併記して表示
・Translation APIの予期せぬエラー時の対処を強化

コメント

タイトルとURLをコピーしました