SRT字幕

Lingo.dev CLIによるSRT字幕ファイルのAI翻訳

SRT字幕とは何ですか?

SRT(SubRip)字幕は、動画字幕を保存するために使用されるプレーンテキストファイル形式です。各字幕エントリには連番、タイムスタンプ、字幕テキストが含まれており、最も広くサポートされている字幕形式の一つとなっています。

例えば:

1
00:00:01,000 --> 00:00:03,500
プロダクトデモへようこそ

2
00:00:04,000 --> 00:00:06,500
この動画では、素早く始める方法を
ご紹介します

3
00:00:07,000 --> 00:00:09,500
まず、ダッシュボードに移動します 📊

Lingo.dev CLIとは何ですか?

Lingo.dev CLIは、AIでアプリやコンテンツを翻訳するための無料のオープンソースCLIです。従来の翻訳管理ソフトウェアに代わるものとして設計されており、既存のパイプラインと統合できます。

詳細については、概要をご覧ください。

このガイドについて

このガイドでは、Lingo.dev CLIを使用してSRT字幕ファイルを翻訳する方法を説明します。

以下の方法を学びます:

  • ゼロからプロジェクトを作成する
  • 翻訳パイプラインを設定する
  • AIで翻訳を生成する

前提条件

Lingo.dev CLIを使用するには、Node.js v18以上がインストールされていることを確認してください:

❯ node -v
v22.17.0

ステップ1. プロジェクトのセットアップ

プロジェクトのディレクトリにi18n.jsonファイルを作成します:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

このファイルは、翻訳パイプラインの動作を定義し、どの言語間で翻訳するか、ローカライズ可能なコンテンツがファイルシステム上のどこに存在するかを指定します。

利用可能なプロパティの詳細については、i18n.jsonをご覧ください。

ステップ2. ソースロケールの設定

_ソースロケール_は、コンテンツが最初に書かれた元の言語と地域です。ソースロケールを設定するには、i18n.jsonファイルのlocale.sourceプロパティを設定します:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

ソースロケールはBCP 47言語タグとして提供する必要があります。

Lingo.dev CLIがサポートするロケールコードの完全なリストについては、サポートされているロケールコードをご覧ください。

ステップ 3. ターゲットロケールを設定する

_ターゲットロケール_とは、コンテンツを翻訳したい言語や地域のことです。ターゲットロケールを設定するには、i18n.jsonファイルのlocale.targetsプロパティを設定します:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

ステップ 4. ソースコンテンツを作成する

まだ作成していない場合は、翻訳するコンテンツを含む1つ以上のSRT字幕ファイルを作成してください。これらのファイルは、パスのどこかにソースロケールを含む場所に配置する必要があります(例:ディレクトリ名としてen/や、ファイル名の一部としてmessages.en.srtなど)。

ステップ 5. バケットを作成する

  1. i18n.jsonファイルのbucketsオブジェクトに"srt"オブジェクトを追加します:

    {
      "$schema": "https://lingo.dev/schema/i18n.json",
      "version": "1.10",
      "locale": {
        "source": "en",
        "targets": ["es"]
      },
      "buckets": {
        "srt": {}
      }
    }
    
  2. "srt"オブジェクト内で、1つ以上のincludeパターンの配列を定義します:

    {
      "$schema": "https://lingo.dev/schema/i18n.json",
      "version": "1.10",
      "locale": {
        "source": "en",
        "targets": ["es"]
      },
      "buckets": {
        "srt": {
          "include": ["./[locale]/example.srt"]
        }
      }
    }
    

    これらのパターンは、翻訳するファイルを定義します。

    パターン自体は:

    • 設定されたロケールのプレースホルダーとして[locale]を含む必要があります
    • ファイルパスを指定できます(例:"[locale]/video.srt"
    • ワイルドカードプレースホルダーとしてアスタリスクを使用できます(例:"[locale]/*.srt"

    再帰的なグロブパターン(例:**/*.srt)はサポートされていません。

ステップ 6. LLMを設定する

Lingo.dev CLIは、AIでコンテンツを翻訳するために大規模言語モデル(LLM)を使用します。これらのモデルを使用するには、サポートされているプロバイダーからAPIキーが必要です。

できるだけ早く始めるために、毎月10,000トークンの無料使用量を提供する独自のホスティングプラットフォームLingo.dev Engineの使用をお勧めします:

  1. Lingo.devアカウントにサインアップしてください。

  2. 次のコマンドを実行します:

    npx lingo.dev@latest login
    

    これによりデフォルトのブラウザが開き、認証を求められます。

  3. 画面の指示に従ってください。

ステップ 7. 翻訳を生成する

i18n.jsonファイルが含まれているディレクトリで、次のコマンドを実行します:

npx lingo.dev@latest run

このコマンドは以下を実行します:

  1. i18n.jsonファイルを読み込みます。
  2. 翻訳が必要なファイルを検索します。
  3. ファイルから翻訳可能なコンテンツを抽出します。
  4. 設定されたLLMを使用して抽出されたコンテンツを翻訳します。
  5. 翻訳されたコンテンツをファイルシステムに書き戻します。

翻訳が初めて生成されるとき、i18n.lockファイルが作成されます。このファイルは、どのコンテンツが翻訳されたかを追跡し、後続の実行で不要な再翻訳を防ぎます。

en/example.srt

1
00:00:01,000 --> 00:00:03,500
Welcome to our product demo

2
00:00:04,000 --> 00:00:06,500
In this video, we'll show you
how to get started quickly

3
00:00:07,000 --> 00:00:09,500
First, navigate to your dashboard 📊

4
00:00:10,000 --> 00:00:12,500
This process takes about 5 minutes

5
00:00:13,000 --> 00:00:15,500
Click the <i>Create New</i> button to begin

es/example.srt

1
00:00:01,000 --> 00:00:03,500
Bienvenido a nuestra demostración de producto

2
00:00:04,000 --> 00:00:06,500
En este video, te mostraremos
cómo empezar rápidamente

3
00:00:07,000 --> 00:00:09,500
Primero, navega a tu panel de control 📊

4
00:00:10,000 --> 00:00:12,500
Este proceso toma aproximadamente 5 minutos

5
00:00:13,000 --> 00:00:15,500
Haz clic en el botón <i>Crear Nuevo</i> para comenzar

i18n.json

{
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {
    "srt": {
      "include": ["./[locale]/example.srt"]
    }
  },
  "$schema": "https://lingo.dev/schema/i18n.json"
}

i18n.lock

version: 1
checksums:
  424142ee2f7c4f944722042f761b30eb:
    1#00:00:01,000-00:00:03,500: 5a2215cdfd6d9e9162efbdee57b89c27
    2#00:00:04,000-00:00:06,500: ecb7d6cb214b6db6d02e6e98cdfea178
    3#00:00:07,000-00:00:09,500: 3eee55196aea6ac13fb19eae7e7ffaf6
    4#00:00:10,000-00:00:12,500: a6cc802efe3431c7a986ac5d42d62ce1
    5#00:00:13,000-00:00:15,500: f73ef0a42ea51efb4e1e5fd2276ef243