3時間の録画も、文字起こし → 目次 → 軽量化 → 字幕の4ステップで「見たい3分だけ見られる動画」に変わります。
まずはAIに丸投げ。自分でやりたい方は、下にコマンド付きの手順書も用意しました。
音声を全部テキストに
話の切れ目で章分け
ファイルを小さく
字幕ファイルを自動生成
むずかしいことは分からなくて大丈夫です。
下の文章をまるごとコピーして、お使いのAIエージェント(Claude Code など)に貼るだけ。
あとはAIが、道具の準備から文字起こし・目次・字幕まで進めてくれます。
あなたは、私のパソコンの中で作業できるAIエージェントです。 私の手元にある動画を「あとから見返せる動画」に変えてください。 専門用語は使わず、詰まったら日本語で状況を教えてください。 やってほしいこと: 1. 文字起こし:手元だけで動く文字起こしAI(faster-whisper、モデルは large-v3-turbo、CPU、int8、無音とばし=ON)を使い、日本語で文字にする。結果は transcript.txt(時刻つき)と segments.json に保存する。音声は絶対に外部サービスにアップロードしないこと。 2. 目次:文字起こしを読んで、話題が変わる場所に「時刻+見出し」をつけた目次を作る。0:00 から始め、VimeoやYouTubeの説明欄にそのまま貼れる形にする。 3. 軽量化:ffmpeg で動画を軽くする(HEVC・4Mbps)。画面の文字が読める画質は保つ。 4. 字幕:segments.json から字幕ファイル(subtitle.vtt)を作る。 5. 議事録:文字起こしから「決まったこと・やること・要確認」を時刻つきの箇条書きで抜き出す。 対象の動画ファイル:(ここにファイル名かパスを書く。例:input.mp4) 作業に必要な道具(faster-whisper や ffmpeg)が入っていなければ、入れるところからやってください。
安心のための注意:動画の音声そのものは、手元のパソコンだけで文字起こしされます。
ただし、AIエージェントは文字起こしの中身を読みます。お客様の名前など機密が強い録画のときは、社内で使えるAIエージェントを使うか、固有名詞を伏せてから進めると安全です。
AIにも渡したくない・仕組みを自分で持ちたい方向けの手順です。
手元のパソコンだけで動く文字起こしAI「Whisper」を使います。
音声をインターネットに送りません。
ターミナル(Mac)に、次の内容を貼って実行します。
文字起こしAIと、動画を扱うツール(ffmpeg)が入ります。
# 文字起こしAI(ローカルで動く)と ffmpeg を入れる
pip install faster-whisper
brew install ffmpeg
下の内容を transcribe.py という名前で保存します。
input.mp4 の部分を自分の動画ファイル名に変えて実行します。
文字起こし(transcript.txt)と、字幕づくりに使うデータ(segments.json)ができます。
import json from faster_whisper import WhisperModel # CPUで安定動作する設定(GPU版が環境で落ちても、これなら動く) model = WhisperModel("large-v3-turbo", device="cpu", compute_type="int8") segments, info = model.transcribe( "input.mp4", # ← 自分の動画ファイル名に変える language="ja", vad_filter=True, # 無音をとばして速く・正確に ) rows = [] with open("transcript.txt", "w", encoding="utf-8") as f: for s in segments: line = f"[{int(s.start//60):02d}:{int(s.start%60):02d}] {s.text.strip()}" print(line) f.write(line + "\n") rows.append({"start": s.start, "end": s.end, "text": s.text.strip()}) with open("segments.json", "w", encoding="utf-8") as f: json.dump(rows, f, ensure_ascii=False, indent=2) print("\n完了:transcript.txt と segments.json を作成しました")
python3 transcribe.py
つまずきポイント:「速くしたい」とGPU版(mlx-whisper など)を入れると、Macの環境によっては互換性エラーで動かないことがあります。上のCPU版(faster-whisper)なら安定して動き、実測で74分の動画が約16分で終わりました。まずはこれで十分です。
文字起こしを読んで、話が変わる場所に時刻をつけます。
説明欄に貼るだけで、章分けになります。
transcript.txt を見ながら、話題の切れ目に合わせて「時刻+見出し」を並べます。
これをVimeoやYouTubeの説明欄に貼ります。
00:00 はじめに・今日の全体像 03:12 ○○の基本と注意点 08:45 △△の具体的な手順 15:30 よくある質問 22:10 まとめ
Vimeo・YouTube共通:説明欄に「0:00」から始まる時刻リストを3つ以上・時間の早い順で貼ると、自動でチャプター(章分け)になります。YouTubeは「各区切りを10秒以上あける」という条件があります。
ファイルが重いとアップロードに時間がかかります。
画質を保ったまま小さくします。
ffmpegで圧縮します。
実測で 約38GB → 約5.3GB(約7分の1)まで小さくなり、業務画面の文字が読める画質は保てました。
# input.mp4 を軽い output.mp4 にする(HEVC・4Mbps)
ffmpeg -i input.mp4 -c:v hevc_videotoolbox -b:v 4M \
-tag:v hvc1 -c:a aac -b:a 128k output.mp4
-tag:v hvc1 をつけると、Vimeoや標準の再生ソフトで正しく再生されます。もっと軽くしたいときは 4M を 2M に、画質を上げたいときは 6M に変えます。
STEP1で作った segments.json から、字幕ファイル(WebVTT)を数秒で作れます。
下を make_vtt.py として保存して実行します。
subtitle.vtt ができます。
import json
def ts(t):
h = int(t // 3600); m = int((t % 3600) // 60); s = t % 60
return f"{h:02d}:{m:02d}:{s:06.3f}"
rows = json.load(open("segments.json", encoding="utf-8"))
with open("subtitle.vtt", "w", encoding="utf-8") as f:
f.write("WEBVTT\n\n")
for i, r in enumerate(rows, 1):
f.write(f"{i}\n{ts(r['start'])} --> {ts(r['end'])}\n{r['text']}\n\n")
print("完了:subtitle.vtt を作成しました")
Vimeo・YouTube共通:できた subtitle.vtt は、VimeoでもYouTube Studioでも、字幕ファイル(VTT / SRT対応)としてそのままアップロードできます。1つ作れば使い回せます。
文字起こしを読ませると、決まったこと・やることを時刻つきで抜き出せます。
transcript.txt の中身を、いつものAIチャットに貼ります。
下の指示を送ると、会議・研修の録画が、そのまま議事録になります。
以下は会議・研修の文字起こしです。次の3つを、時刻つきの箇条書きで整理してください。 1. 決定事項(誰が・何を・どうすると決めたか) 2. やること(TODO。担当と期限がわかれば添える) 3. 保留・要確認(あいまいなまま終わった点) 聞き取りの誤変換らしき固有名詞は[要確認:〇〇?]と書いてください。 勝手に情報を足さず、文字起こしにある内容だけでまとめてください。 ――― 以下、文字起こし ――― (ここに transcript.txt を貼る)
この工程だけは注意:クラウドのAIチャットに文字起こしを貼ると、その内容は外部に送られます。機密性の高い録画は、固有名詞を伏せてから貼るか、手元で動くAIを使ってください。「音声はローカル、外に出してよい情報だけをAIに渡す」が安全な線引きです。
・固有名詞が変換ミスされる:音声認識なので、会社名や専門用語はときどき別の言葉になります。よく出る言葉だけ、あとで一括置換すれば実用十分です。完璧を目指さないのがコツです。
・GPUで速くしようとして動かない:環境依存で落ちることがあります。STEP1のCPU版なら安定します。
・音を出しにくい環境で見たい:字幕(STEP4)をつけておくと、あとで特定の言葉を探すのにも役立ちます。