﻿# おまかせ文字起こし / EasyTranscribe

[English](README.en.md) ｜ [中文](README.zh.md) ｜ [한국어](README.ko.md)

動画の文字起こし・不要部分のカット・字幕焼き込みができるローカルツールです。  
完全ローカル動作・無料・サービス終了なし。Mac / Windows 対応。

---

[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.20515527.svg)](https://doi.org/10.5281/zenodo.20515527)

役に立ったら **[⭐ Star](https://github.com/sasakireijiyagi/video-cut-editor)** をつけてもらえると励みになります！

このツールは九州大学の研究者が空き時間に個人で開発・維持しています。
世界中の方に使っていただけるようになってきました。
もし研究や仕事で役に立ったら、**コーヒー1杯分でも寄付いただけると次の開発の大きな励みになります** ☕
画面右上の **❤ 開発を支援する** ボタンからどうぞ。

---

## ダウンロード（インストーラー）

**[ダウンロードページ](https://sasakireijiyagi.github.io/video-cut-editor/)** からどうぞ。Pythonのインストール不要！

---

## 主な機能

- **文字起こし**：[OpenAI Whisper](https://github.com/openai/whisper) で講義・会議動画を自動転写 — **100言語対応**
- **編集**：開始・終了時間の直接編集、◀/▶ ボタンで微調整、テキスト編集
- **分割・統合**：行を文字位置で分割、複数行を1行に統合
- **カット**：選択区間を結合または個別ファイルとして書き出し
- **字幕焼き込み**：太めゴシック・白文字・黒縁取りで映像に直接焼き込み
- **バッチ文字起こし**：複数ファイルをキュー処理、実行中もファイル追加可能
- **縦動画**（9:16）：自動検出してレイアウト切り替え

---

## 文字起こし対応言語（100言語）

Whisper は **100言語**の文字起こしに対応しています。アプリの言語選択では主要13言語＋自動検出を選べます。

| 地域 | 言語 |
|------|------|
| 東アジア | 日本語・中国語（普通話・広東語）・韓国語 |
| 東南アジア | インドネシア語・マレー語・タイ語・ベトナム語・タガログ語・ジャワ語・クメール語・ラオ語・ミャンマー語 |
| 南アジア | ヒンディー語・ベンガル語・ウルドゥー語・タミル語・テルグ語・グジャラート語・マラーティー語・パンジャブ語・ネパール語・シンハラ語 |
| 中東・中央アジア | アラビア語・ペルシャ語・ヘブライ語・トルコ語・カザフ語・ウズベク語・アゼルバイジャン語・ジョージア語・アルメニア語 |
| ヨーロッパ（西） | 英語・スペイン語・フランス語・ドイツ語・イタリア語・ポルトガル語・オランダ語・スウェーデン語・ノルウェー語・デンマーク語・フィンランド語・ポーランド語・チェコ語・ハンガリー語・ルーマニア語・ギリシャ語 |
| ヨーロッパ（東） | ロシア語・ウクライナ語・ブルガリア語・セルビア語・クロアチア語・スロバキア語・スロベニア語・マケドニア語・ベラルーシ語・リトアニア語・ラトビア語・エストニア語 |
| アフリカ | スワヒリ語・ハウサ語・ヨルバ語・ソマリ語・アムハラ語・シナ語・リンガラ語・マダガスカル語 |
| その他 | ウェールズ語・アイスランド語・マオリ語・ハワイ語・ラテン語・サンスクリット語 など |

---

## 必要なもの（共通）

- インターネット接続（初回セットアップ時のみ）
- [Anaconda](https://www.anaconda.com/download) または [Miniconda](https://docs.conda.io/en/latest/miniconda.html)

---

## セットアップ — Mac

配布フォルダの中にある **「セットアップ.command」をダブルクリック**してください。

ターミナルが開いて自動でセットアップが進みます。完了したら Enter キーを押してウィンドウを閉じてください。

> **セットアップで自動インストールされるもの（既にある場合はスキップ）**
> - Homebrew（パッケージ管理）
> - ffmpeg（動画処理）
> - whisper（文字起こし）

> **「開発元を確認できない」と表示された場合**  
> Finder で「セットアップ.command」を右クリック →「開く」→「開く」をクリックしてください。

---

## セットアップ — Windows

### 1. ffmpeg をインストール

[ffmpeg 公式サイト](https://ffmpeg.org/download.html) からビルド済みバイナリをダウンロードし、`C:\ffmpeg` に展開します。  
その後、システム環境変数の `PATH` に `C:\ffmpeg\bin` を追加してください。

> **確認方法：** コマンドプロンプトで `ffmpeg -version` と入力してバージョンが表示されればOKです。

### 2. whisper をインストール

Anaconda Prompt（またはコマンドプロンプト）で以下を実行してください：

```bat
pip install openai-whisper
```

### 3. PyQt6 をインストール

```bat
pip install PyQt6
```

### 4. 起動

```bat
python editor.py
```

> **注意：** Windowsでは `.app` ファイルは使用できません。`editor.py` を直接実行してください。

---

## 起動方法 — Mac

セットアップ完了後は **`おまかせ文字起こし.app` をダブルクリック**するだけです。  
Dock に追加しておくと便利です。

---

## 使い方

### 基本の流れ

```
動画を開く → 文字起こし実行 → 不要な行のチェックを外す → ffmpegカット実行
```

### ステップごとの説明

**① 動画を開く**  
「動画を開く…」ボタンで動画ファイルを選択します。  
同名の `.srt` ファイルが同じフォルダにあれば自動で読み込まれます。  
縦動画（9:16など）を開くと、レイアウトが自動で上下並びに切り替わります。

**② 文字起こし（whisper）**  
「🎙 文字起こし実行」を押すと自動で文字起こしが始まります。  
完了すると右側のテーブルにセグメント一覧が表示されます。

> **モデルを変えて再度文字起こしする場合**  
> 既存の `.srt` ファイルは上書きされます。残したい場合は事前にリネームしてください。

**③ セグメントを確認・編集**  
- 行をクリックすると該当部分の動画をプレビュー再生（区間末尾で自動停止）
- テキスト列をダブルクリックするとその場で編集できます
- 開始・終了時間列をダブルクリックすると `HH:MM:SS,mmm` 形式で直接編集できます
- SRTテーブル上部の **◀ / ▶ ボタン**で選択行の開始・終了時間を微調整できます（100ms / 500ms 切り替え）
- **右クリック → 行を分割…** — テキストをクリックして分割点を選択、時間は文字数の比率で自動計算されます
- **右クリック → 選択行を統合** — 連続した複数行を選択して1行にまとめます
- テキスト・時刻・分割・統合の編集はすべて **Ctrl+Z** で元に戻せます（Ctrl+Y でやり直し）
- 「🔍 検索・置換」ボタン（または **Ctrl+H**）で一括編集できます
- 「✂ フィラーカット」ボタンで「えー」「あの」などのフィラー語を含む行を一括でチェック解除できます
- 編集後は「SRT保存」で元のSRTファイルに上書き保存できます

**④ 不要な部分を除外**  
残したい行だけチェックを入れます（デフォルトは全選択）。  
右上に `選択件数 | 合計 XX:XX` でリアルタイムに合計時間が表示されます。

**⑤ カット実行**  
出力設定を選んで「▶ ffmpegカット実行」を押します。

---

## 出力オプション

| 設定 | 内容 |
|------|------|
| 1ファイルに結合 | 選択した区間をつなげて1本の動画にする |
| 行ごとに別ファイル | 区間ごとに個別のファイルとして保存する |
| 再エンコード | カットがズレる場合にオン（処理は遅くなる） |
| 字幕を焼き込む | 選択セグメントの字幕を映像に焼き込む（後述） |
| 出力先 | 保存先フォルダを自由に指定できる |

---

## 字幕焼き込み

出力設定の「**字幕を焼き込む**」をチェックすると、映像に字幕を直接焼き込んで出力できます。

- フォント：Hiragino Kaku Gothic ProN（太めゴシック）
- スタイル：白文字・黒縁取り・下中央固定
- **フォントサイズ**はスピンボックスで調整可能（横動画デフォルト 40px・縦動画デフォルト 36px）
- **▶ プレビュー**ボタンで選択中の行だけ書き出して確認できます。サイズを変えながら何度でも試せます
- 確認後、通常通り「▶ ffmpegカット実行」すると全セグメントに焼き込まれます

> 字幕焼き込みは常に再エンコードになります（「再エンコード」チェックの有無に関わらず）。

> **⚠️ ffmpeg の libass について**  
> 字幕焼き込みには **libass を含む ffmpeg** が必要です。Homebrew の標準 `ffmpeg`（最近のバージョン）は libass を同梱していないため、字幕焼き込みだけ動かない場合があります。  
> その場合は homebrew-ffmpeg 版を導入してください（libass は標準で有効）:  
> ```
> brew tap homebrew-ffmpeg/ffmpeg
> brew unlink ffmpeg
> brew install homebrew-ffmpeg/ffmpeg/ffmpeg
> ```  
> 導入後に `ffmpeg -hide_banner -filters | grep subtitles` で `subtitles` 行が出れば成功です。  
> 文字起こし・カット・EAF書き出しなど他の機能は libass なしでも問題なく使えます。

---

## 縦動画への対応

動画を開いた際に縦動画（高さ > 幅）を自動検出します。

- プレイヤーとSRTテーブルが**上下並び**に自動切り替わります
- 字幕焼き込みのフォントサイズが **36px** に自動設定されます
- 横動画を開き直すと元のレイアウトに戻ります

---

## 検索・置換

SRTテーブル上部の「🔍 検索・置換」ボタン、または **Ctrl+H** で開きます。

- **検索**：マッチした行が黄色くハイライトされます
- **次へ / 前へ**：マッチ行を順番に移動
- **置換**：現在のマッチを1件置換
- **一括置換**：全件まとめて置換
- 大文字小文字の区別もオプションで切り替え可能

---

## フィラーカット

SRTテーブル上部の「✂ フィラーカット」ボタンで開きます。

「えー」「あの」「なんか」などのフィラー語と完全一致するセグメントのチェックを一括で外します。  
リストは**追加・削除・編集して自由にカスタマイズできます**。

**対応言語（文字起こし言語に連動して自動切り替え）：**  
日本語・英語・中文・한국어・Español・Français・Deutsch・Português

対応言語以外（アラビア語・ロシア語など）は空欄で開くので、フィラー語を手動で入力して使えます。

**日本語のデフォルトフィラー語：**  
えー / えーと / えっと / あー / あの / あのー / うーん / まあ / そのー / なんか / ね / はい など

---

## バッチ文字起こし

複数の動画ファイルをまとめて文字起こしする場合は、  
「📂 バッチ文字起こし」ボタンから専用ダイアログを開きます。

1. 「ファイルを追加…」または「フォルダを追加…」で動画を登録
2. モデル・言語・[間]設定を確認
3. 「▶ 実行」で順番に処理開始

- 処理中は「**処理中 [2/5]: lecture03.mp4**」のように現在のファイルがリアルタイム表示されます
- **実行中でもファイルを追加できます**（キューに即時反映されます）
- 削除・全クリアは実行中は無効になります（誤操作防止）

夜間にMacをつけたまま実行しておけば、翌朝には全ファイルのSRTが完成しています。

---

## ジェットカット（無音部分を一括削除）

全行を選択したまま「1ファイルに結合」で実行すると、  
whisperが発話として認識した区間だけをつなげた動画が出力されます。  
**whisperのSRTが無音部分をスキップしているため、追加の操作は不要です。**

---

## 無音区間の記録（研究・分析用途）

文字起こし実行前に **「[間]を記録」チェックボックス** をオンにすると、  
指定秒数以上の無音区間が `[間  3.2秒]` としてSRTに自動挿入されます。

- 閾値はデフォルト **1.0秒**（0.5〜10秒の範囲で変更可）
- 挿入されたエントリもテーブルに表示され、チェックを外せばカット対象から除外できます
- 発話タイムスタンプと合わせて研究データとして活用できます
- バッチ文字起こしでも同様に設定できます

---

## キーボードショートカット

**SRTテーブル操作**

| キー | 機能 |
|------|------|
| ↓ / ↑ | 次/前の行に移動して再生 |
| X | 現在行のチェックをオン/オフ |
| D | テキスト編集モードに入る |
| Escape | 編集モードを抜ける |
| S | 分割ダイアログを開く |
| Z | 前の行と統合 |
| C | 次の行と統合 |

**全般**

| ショートカット | 機能 |
|---------------|------|
| Ctrl+Z | 元に戻す |
| Ctrl+Y | やり直す |
| Ctrl+H | 検索・置換を開く |

---

## 言語切り替え

右上の **「EN」ボタン** でUIを英語に切り替えられます。もう一度押すと日本語に戻ります。

---

## whisperモデルについて

| モデル | 精度 | 速度 | 備考 |
|--------|------|------|------|
| large-v3 ★ | ◎ 最高 | 遅い | 推奨 |
| medium ★ | ○ | 普通 | |
| small ★ | △ | 速い | |
| base ★ | △ | 最速 | |
| turbo | ○ | 速い | 初回DL必要 |

**★** はローカルにダウンロード済みですぐ使えます。  
★なしのモデルは初回実行時に自動でダウンロードされます（large-v3は約3GB）。

CPUで動作するため、処理時間は**動画の長さの3〜10倍**程度かかります。

---

## 注意事項

- 元の動画ファイルは変更されません（出力は常に別ファイル）
- 「SRT保存」は元のSRTファイルを**上書き**します。必要に応じてバックアップをとってください
- 同じ動画を再度文字起こしすると、既存のSRTファイルは上書きされます
- カット点が数フレームずれる場合は「再エンコード」オプションをオンにしてください

---

## 免責事項

本ツールは研究・教育用途向けの試作ソフトウェアです。動作を保証するものではなく，使用によって生じたいかなる損害についても作者は責任を負いません。元の動画ファイルは変更されませんが，出力ファイルの取り扱いはご自身の責任でお願いします。

---

## ライセンス

[MIT License](LICENSE) © 2025 Reiji Sasaki  
自由に使用・改変・配布できます。著作権表示を残してください。

---

## 感想・バグ報告

使ってみた感想、どんな用途で使っているか、改善の提案など、気軽に **[GitHub Issues](https://github.com/sasakireijiyagi/video-cut-editor/issues)** へどうぞ。日本語・英語どちらでも大丈夫です。
