.srt を .txt に変換するローカルツール [PowerShell]

これは何?

動画編集ソフトから書き出された .srt(タイムスタンプ=時間等のデータも入った文字起こしファイル)を .txt に変換(時間等のデータを削除し、字幕本文のみの純テキストを抽出)するPowerShell用スクリプト「srt2txt.ps1」の改良版を作成しました。

  • 2025/9/2 現在、本家「srt2txt.ps1」のページが閲覧できなくなっている
  • .srt ファイルの中身によっては、「srt2txt.ps1」では上手く変換されないことがある

ということもあり ・・・ 誰かの役に立つかもしれませんので、ここに公開しておきますね。

背景・経緯

半月ほど前 ・・・ お盆の頃。必要に迫られて ・・・
(ある人から、不躾に複数の長尺 .srt が送られてきて「(サイトへの文章掲載)よろしく」と)

  • 内容的にも
    (関係者Only的な内々の話題が含まれており、どこかのサーバー上にアップしたくない)
  • 作業効率的にも
    (複数の .srt ファイルを確認しながら変換したい)

オフライン・ローカルで動作するツールが望ましいという条件がありました。

「srt txt 変換」でググってみると、オンラインツールは多数ヒットするものの、オフライン・ローカルで動かせるツールは少ない模様。

「srt txt 変換」Google検索結果スクリーンショット

srt2txt.ps1

上図スクリーンショット内の上から4番目:滋賀県総合教育センターのサイト内に、PowerShell で動作するスクリプト「srt2txt.ps1」が公開されていた → ダウンロード&試行してみたものの、残念ながらそのままでは上手く変換されませんでした。

「srt2txt.ps1」は、4行構成の典型的な .srt を想定して

1         ← 行番号
00:00:00,000 --> 00:00:02,000  ← タイムスタンプ
字幕本文
(空行)

というパターンから「3行目」だけを抜き出す設計になっていることに起因する模様。
→ 字幕本文が複数行になっている箇所が1箇所でもあると、そこ以降は全てズレてしまい上手く変換されないという不具合が生じてしまいます。

また、当方が上記サイトを確認したわずか1週間後 ・・・ 同サイトはリニューアルに入った模様で、「srt2txt.ps1」紹介ページ は閲覧することが出来なくなってしまいました。

※ 当記事を書いている 2025/9/2 現在、Googleのインデックスには残っている = ググると出てくるものの、リンク先にアクセスしても当該記事には辿り着けない状態です。

作ったもの

つきましては、srt2txt.ps1 をもとに、(AIに頼んで)字幕本文が複数行になる場合にも問題なく動作するよう改善し(てもらっ)たコードを置いておきます。

srt2txt-kai.ps1

PowerShell
# srt2txt-kai.ps1 - SRTから本文だけ抽出してTXTに保存
# 動作環境: Windows 10/11 + PowerShell 5.1~

Add-Type -AssemblyName System.Windows.Forms

# ファイル選択ダイアログ
$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.Filter = "字幕ファイル (*.srt)|*.srt"
$dialog.Title  = "変換する字幕ファイルを選択してください"
$dialog.InitialDirectory = (Get-Location).Path

if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {

    $srcFile = $dialog.FileName
    $dstFile = [System.IO.Path]::ChangeExtension($srcFile, ".txt")

    # SRTを読み込み(UTF8 BOMあり想定)
    $lines = Get-Content -Path $srcFile -Encoding UTF8

    # 不要行を除外
    $textLines = $lines | Where-Object {
        if ($_ -match '^\d+$') { return $false }
        if ($_ -match '^\d{2}:\d{2}:\d{2},\d{3}') { return $false }
        if ([string]::IsNullOrWhiteSpace($_)) { return $false }
        return $true
    }

    # 保存(UTF-8 BOM付き)
    $textLines | Set-Content -Path $dstFile -Encoding UTF8

    Write-Host "変換完了: $dstFile"
    Write-Host "抽出件数: $($textLines.Count) 行"

} else {
    Write-Host "キャンセルされました"
}

Read-Host "Enterキーで終了"

使い方

  • 上記コードをテキストエディタ(Windowsメモ帳など)にコピペ
  • 「srt2txt-kai.ps1」などのファイル名を付け、UTF-8(BOM付)で保存
    【重要:BOMなしのUTF-8で保存すると、実行時にエラーとなります】
  • srt2txt-kai.ps1 を右クリック → PoweShell で実行
  • ファイル選択ダイアログが出るので、対象の .srt を選択
  • .srt が同名 .txt に変換されます(同じ場所に保存)

特記事項

PowerShell で 外部から入手したスクリプトを実行するには、初回のみ実行ポリシーの設定変更が必要。PowerShell を管理者権限で開いて

PowerShell
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

免責事項

当スクリプトおよび、PowerShell の設定変更等による不具合に対する責任は負いかねます。自己責任のもとで行ってくださいね。

ニッチニーズに

動画担当者から送られてきたものが .srt だった ・・・ しかしながら、要約作成などに利用するにあたり、字幕本文・純テキストのみを抽出したい ・・・ なんて場合には、時短に重宝するのではと思います🙂

そもそも、動画編集ソフトからタイムスタンプ入りの .srt ではなく、字幕本文のみを .txt で書き出せば(書き出してくれれば)早い(助かる)ということは置いておきましょう;

お役に立ちましたら、シェアしていただけると嬉しいです!

はてなブックマークに追加Add
クリップボードにコピーCopy URL
Author

林@零細Web屋

名古屋の自営業者(フリーランス13年目)です。中小/個人の事業者さんが抱えるお悩みの解決・目的達成のお役に立てるよう、Webサイト制作&運用支援を行っています。かつて中小企業で情報システム・広報・採用などを担当していた経験を活かし、受け手の目線に立った仕事を心がけています。

» プロフィール詳細 » 問い合わせてみる