mlsubgenは動画の字幕を37言語で自宅のGPUだけで作るOSS、タイ在住の個人が公開

3行でわかる
- mlsubgenは動画のあるフォルダで1コマンド実行すると、指定した言語ごとに字幕ファイル(.srt)を作るApache 2.0のOSS
- mlsubgenは音声認識のQwen3-ASRとWhisperを両方かけて食い違いをLLMが調整し、翻訳もOllama上のGemma 4などで手元のGPUで完結させる
- 作者は37言語を翻訳先として提供し、試験で品質が足りなかった8言語は外したと公表している。日本語は「よく読める」側に入った
タイ在住の個人開発者が、動画のフォルダを指定するだけで多言語の字幕ファイルを作るオープンソースのツール「mlsubgen」を公開しました。音声の書き起こしも翻訳もすべて手元のNVIDIA製GPUで処理し、翻訳先として37言語に対応します。作者は現地時間10月3日にRedditのr/LocalLLaMAで紹介しました。
何を作ったか
mlsubgenとは、動画を置いたフォルダで mlsubgen と打つと、その下の全動画に「動画名.en.srt」「動画名.th.srt」のような言語別の字幕ファイルを書き出すツールです。名前は multi-language(多言語)と machine-learning(機械学習)の頭文字から来ています。ライセンスはApache 2.0です。
作者がRedditに書いたところでは、きっかけはタイ人の友人や、タイ人のパートナーがいる外国人の友人のために「クレヨンしんちゃん」のタイ語字幕を作ることでした。READMEでは、個人の動画コレクション向けの日本語→英語ツールとして始まったと説明しています。
Your media and its subtitle text never leave the machine: the speech is transcribed by local models and translated by a local LLM.
動画も字幕の文章も手元の機械から出ていかない。音声はローカルのモデルで書き起こし、ローカルのLLMで翻訳する。
原文を読む(github.com)外部と通信するのは、最初にモデルをダウンロードするときだけだとしています。ジョブの順番待ち、一時停止・再開、Web画面も備えており、作った字幕はJellyfinやPlexなどのメディアサーバーがそのまま読み込めます。
どう作ったか
設計の考え方は「ファイルにすでにある手がかりを先に使う」です。処理は次の順で、上で済めば下には進みません。
- 目的の言語のテキスト字幕が動画に入っていれば、それをそのまま使う
- Blu-rayの画像形式の字幕(PGS)があれば、文字認識(OCR)で読み取る
- 話している言語の字幕があれば、それを元に翻訳する(聞き取りはしない)
- 何もなければ、音声を聞いて言語を判定し、書き起こしてから翻訳する
音声を聞く場合は、約10秒ごとに言語を判定します。日本語の番組に英語のインタビューが混ざるような動画にも対応するためです。書き起こしはQwen3-ASR-1.7Bとfaster-whisper large-v3の2つを毎回かけ、結果が食い違う箇所だけを翻訳用のLLMが突き合わせて直します。翻訳はOllama経由で20行ずつ前後の文脈を渡して行い、登場人物の名前は作品ごとに1回だけ訳を決めて最後まで統一します。
翻訳モデルは、日本語→英語にQwen3.8 27B、それ以外の組み合わせにGemma 4 31Bを使うのが標準です。GPUのメモリが少ない機種では、Gemma 4の26B MoE(1トークンで動くのは約4B)の一部だけをGPUに載せ、残りをメインメモリで動かします。作者の計測では、10分の試験動画のタイ語訳がこの構成で68秒、31Bをすべて24GBのGPUに載せた場合は103秒でした。
| GPUのメモリ | 機種の例 | 翻訳モデル |
|---|---|---|
| 20GB以上 | RTX 3090/4090/5090 | Qwen3.8 27B(日→英)、Gemma 4 31B |
| 15〜20GB | RTX 4080、4060 Ti 16GB | Gemma 4 26B(30層中22層をGPUに) |
| 11〜15GB | RTX 3060 12GB、4070 | Gemma 4 26B(14層をGPUに) |
| 11GB未満 | RTX 3070、4060 | Gemma 4 26B(6層をGPUに) |
動かすにはLinuxとNVIDIA製GPU(最低8GB、推奨24GB)、メモリ16GB以上、ディスク30〜65GBが必要です。AMDやApple、Windowsには対応していません。
開発にはAIを使っています。作者はRedditで、AnthropicのFableに大きく頼って作ったものの、公開前に数か月かけて自分のライブラリで試したと書きました。READMEにも、コードはClaudeの助けを借りて書き、作者が見直して毎日使っていると明記しています。
成果と、作者が示した限界
翻訳の品質は、作者が1話分の英語字幕を45言語に訳して読み比べるという方法で確かめました。その結果、日本語・韓国語・タイ語・ドイツ語など29言語は「よく読める」、中国語・ヘブライ語など7言語は「誤りはあるが使える」と判定しています。ギリシャ語やハンガリー語、クメール語など8言語は造語や他の文字の混入が目立ったため、翻訳先から外しました。Redditの投稿題は「45言語」でしたが、現在のREADMEで翻訳先として選べるのは37言語です。
Blu-rayの画像字幕の読み取りでは、英語で行単位の一致95%、タイ語で77%と公表しています。日本語は別の字幕との比較で一致51%にとどまり、作者は表示タイミングの違いやふりがなが主な原因だと説明しています。
作者は限界も並べています。2つの言語が素早く入れ替わる動画では言語判定を誤ることがあり、話者の聞き分け機能は映画だと人数を多く見積もりがちなため既定でオフです。8〜16GB向けの設定は24GBのGPUで条件を絞って測った値で、実機での報告を求めています。Web画面は既定ではログインがないため、社内LANかVPNの中で使うよう注意書きがあります。
日本のビジネスへの影響
- 使えるか: 無料のOSSで、日本語は翻訳元としても翻訳先としても対応しています。日本語→英語の翻訳には標準でQwen3.8 27Bを使う設定です。ただしLinuxとNVIDIA製GPUが前提で、Windowsのノートパソコンでは動きません。
- 誰にどう効くか: 社内研修動画やウェビナーの録画を海外拠点向けに多言語化したい人事・マーケティング担当者に向きます。映像を外部のクラウドに上げられない案件でも、手元の1台で英語・タイ語・ベトナム語などの字幕をまとめて作れます。
- 今すぐやれること: RTX 4090などを積んだLinux機があれば、Dockerで立ち上げ、10分ほどの動画1本で
mlsubgen benchを使って翻訳モデルごとの出来を比べるのが近道です。クラウドの文字起こしサービスと比べたい場合は文字起こしAIのガイドも参考になります。 - 注意点: 個人が1人で保守する趣味のプロジェクトだと作者自身が書いており、業務の本番に使うなら人の確認が欠かせません。翻訳に使うGemma 4はGoogle独自の利用規約、Qwenや音声認識モデルはそれぞれのライセンスに従います。字幕を付ける動画そのものの著作権の扱いも別途確認が必要です。
一次情報
- 公式サイトGitHub(dodgypast)dodgypast/mlsubgen: Multi-Language subtitle generator
- コミュニティReddit r/LocalLLaMAmlsubgen — subtitles in 45 languages for your videos, entirely on your own machine
AIデジマは、公式発表・X投稿・論文などの一次情報を起点に、複数の情報源を照合して日本語でまとめています。情報の収集・翻訳・下書き・照合にはAIを使い、編集方針と最終責任は編集長が負います(AIの活用について)。誤りを見つけた場合は訂正のご連絡をお願いします。