資格の講義DVDを「観る・聴く・読む」用に丸ごとデジタル化した話(ffmpeg+Whisper)

司法書士の資格講座の講義DVD(全17回・各3コマ)を、動画・音声・文字起こし・字幕の4点セットに変換して、外付けSSDに整理しました。

やってみたら想像以上に快適だったので、仕組みと注意点(コピーガードの話も含めて)を共有します。

目次

やったこと

1枚のDVDの1コマから、最終的にこの4つを生成しています。

形式用途ひとことで
MP4観るスマホでも見れる普通の動画
MP3(128k ステレオ)聴く音だけ。通勤・散歩中の“ながら復習”用、1時間≈50MB
TXT読む・検索する全文の文字起こし
SRT字幕時間情報つき。動画に字幕として重ねられる

これが全17回 × 各3コマ = 51本ぶんそろいました。

「あの論点どこで話してたっけ?」をテキスト検索で一発で探せるのが、思った以上に効きます。

使ったソフトウェア

意外かもしれませんが、中心になる道具は2つともオープンソースでタダです。

あとで後述しますがこれらを使っているがソフトウェアをダウンロードしたわけではないです。ClaudeCode(これは月額3,300円)でやりました。

CladeCode にはこんな感じでお願いしました。

以下に紹介しますが、ソフトのリンクもはりません。AgentAIにおまかせしちゃいましょう。

① ffmpeg(動画・音声の変換ソフト)

世界中のアプリが裏で使っている超定番の変換ツール。DVDの映像を MP4・MP3・WAV に作り替えるのに使います。

② Whisper(音声→文字のAI)

OpenAIが公開している音声認識AI。音声を聞かせると、しゃべった内容を全部テキストにしてくれます。今回は精度と速度のバランスで「small」モデル・日本語指定で回しました。

💡 「Mac用のWhisperアプリ買ったよ」という人へ

市販のMac用Whisperアプリ(MacWhisperなど)も、中で動いているAIエンジンはこの無料のWhisperと同じ。お金を払っているのは「ドラッグ&ドロップで使える画面」という“便利さ”の部分です。だから「手軽に1個だけ → 買ったアプリ」「大量を自動で一気に → コマンドで」と使い分ければムダになりません。私も買ってます

そもそもの資格DVDの中身はどうなっているか

Claudeにお願いして、どうなっているか分析してもらいました。

DVDを開くと VIDEO_TS というフォルダがあり、中に VTS_01_1.VOB のようなファイルが並んでいます。この VOBファイルが映像の本体です。

クセがあって、1コマの講義が1ファイルに収まらず、約1GBごとに分割されています。

  • VTS_01_1 … 「01=1本目の講義」の「1個目のかけら」
  • VTS_01_2 … その続き(後半)
  • VTS_02_1 … 2本目の講義
  • VTS_04(1.5MBと極小) … これはメニュー画面なので無視

なので最初に「前半+後半をくっつけて1本に戻す」処理(連結)をしてから変換しています。

処理の流れ(1枚分)

全部Cladecodeに指示しましたがやっていることはこうらしいです。

DVD(VOBファイル:約1GBずつ分割)
   │  ① かけらを連結して1本に戻す
   ▼
1本の映像
   │  ② ffmpeg で一度に3つ書き出す
   ├─→ MP4(観る)
   ├─→ MP3(聴く)
   └─→ WAV(機械が聞き取りやすい音声・一時ファイル)
            │  ③ Whisper AI が聞き取り
            ├─→ TXT(読む・検索)
            └─→ SRT(字幕)
        用済みの WAV は自動削除 ✅

ちょっと賢くした工夫

  • 2工程を同時進行:DVDの変換(②)は映像チップ(GPU)、文字起こし(③)はCPU、と別々の部品を使う。だから「前のディスクを文字起こししながら、次のディスクを読み込む」と並走でき、待ち時間が減ります。
  • 失敗しても安全:途中で保存先の空き容量が足りずファイルが壊れた時は、壊れたぶんだけ作り直す運用に。実際、容量満杯で1コマ分の文字起こしが欠けた時は、残っていたMP4から音声を取り出してリカバリできました。

DVDにコピーガードは入ってないの?

ここが一番きになるところでしょう。

結論:今回のDVDはコピーガード(CSS)が掛かっていないようでした。だから ffmpeg で VOB を直接読めています。

なぜそう言い切れるのか

DVDのコピーガードは CSS という「暗号化」の仕組み。もし掛かっていたら、VOBの中身が暗号化されていて、ffmpegで直接開いても文字化け・エラーになります

今回は ffmpeg -i VTS_01_1.VOBそのまま綺麗に映像が取れている=暗号化されていない証拠。スッと変換できている時点で、ガード無しだとわかります。

なんでガードが無いのか

これは予備校・資格講座の自習用DVD。この手の講座教材DVDは、もともとコピーガードを掛けていないことが多いです。理由は:

  • 市販映画のような大量コピー対策より、「受講者が普通に再生できること」を優先している
  • プレス工場でCSSを付与するのは追加コスト

らしいので「ガードが無い=この種のDVDでは普通のこと」で、特別なことは何もしていません。

リッピングソフトの話(StreamFab 等)

世の中には StreamFab のような「コピーガードを外すリッピングソフト」があります。もしDVDにガードが有れば、本来はこうしたソフトで先に解除してから吸い出す必要があります。

ただ今回はffmpegで直接読めている=ガード無しなので、そういう解除ソフトは一切通していません。

もし今後ガード付きのディスクが来て ffmpeg がエラーを吐いたら、その時点で「これは暗号化されている」と判別できます。

一応の前提(私的複製の範囲)

やっているのは、自分で買った教材を、自分の学習用に MP4 / MP3 / 文字起こしへ形式変換すること

ガードの掛かっていないものを、バックアップ・学習用にこう変換するのは一般的な使い方の範囲です。(※コピーガードが掛かっているものを解除する、という話になると別の論点が出てきます。そこは線引きが変わるので、必要になったら個別に考えます。)

やってみた所感

  • 検索できる教材は強い。聞き逃した論点を、全文テキストから秒で見つけられます。
  • MP3化で、机に向かえない時間も“耳で復習”に変えられました。
  • 道具がほぼ無料なので、手元のDVD資産を腐らせず資産化できます。

同じように講義DVDが山積みになっている人は、一度試す価値ありです。

(メモ:保存先は外付けSSD。1回ぶん約3.4GBあるので、本体ストレージはすぐ埋まります。最初から大容量の外付けに出力するのがおすすめ。)

これほぼ全自動でやった(Claude Code × Opus 4.8)

正直に言うと、ここまでの作業は自分でコマンドを打ったわけではありませんClaude Code(Anthropicのエージェント型AI、モデルは Opus 4.8)に丸投げで、ほぼ全自動で回しました。

やったことはこれ。

  • DVDをドライブに入れる
  • AIに「入れた」と一言伝える
  • 終わったディスクが自動で出てくる → 次を入れる、を繰り返す

あとはAIが、ディスクの中身(VOB構成)の判別 → 連結 → ffmpegでMP4/MP3/WAV書き出し → Whisperで文字起こし → 不要ファイルの自動削除 → 回ごとのフォルダ整理まで、全部やってくれました。

前のディスクを文字起こししながら次を読み込む“並走”も、AI側が勝手に段取りしてくれます。

途中で本体ストレージが満杯になった事故も、AIが気づいて外付けSSDへ全部退避 → 壊れたコマだけ作り直し、と自律的にリカバリ。さらに「やっぱり聴く用のMP3も欲しい」「ビットレートは128kで」みたいな後出しの注文も、その場で過去ぶんまで一括対応してくれました。

エージェント型AIの実力、地味だけどかなり効きます。

保存版|同じことを自分でやる手順(指示書)

「自分でも再現したい」という人向けに、AIに渡している指示書(段取り)と、文字起こしスクリプトをそのまま載せます。コツは毎回こまかく指示しないこと。段取りをMDファイルに1回書いておくと、あとは「◯枚目入れた」と言うだけで全部やってくれます。

① 仕込むもの(最初の1回だけ)

  • ffmpegffmpeg -version で確認
  • Whisperpip3 install -U openai-whisper
  • transcribe.py(下に全文)をプロジェクト直下に
  • 指示書のMD(下に全文)をプロジェクト直下に
  • 保存先は外付けSSD推奨(1回約3.4GB)

② 指示書のMDファイル(これがキモ)

Claude Code は起動時にプロジェクト直下の CLAUDE.md を読み込みます(Codex CLI は AGENTS.md。シンボリックリンクで共有すれば両対応)。ここに段取りを書くのが全自動化の正体。

# 講義DVD → MP4 / MP3 / 文字起こし 自動化ルーチン

## 前提ツール(初回だけ用意)
- macOS(Apple Silicon 推奨:ffmpegの h264_videotoolbox でGPUエンコード)
- ffmpeg … ~/.local/bin/ffmpeg などに用意(ffmpeg -version で確認)
- Python3 + Whisper … pip3 install -U openai-whisper
- transcribe.py(下記)をプロジェクト直下に置く
- 保存先は外付けSSD推奨(1回ぶん約3.4GB)

## トリガー(私が言う言葉)
- 「◯枚目入れた」… DVDを入れたら、これだけ送る
- 終わったディスクは自動でイジェクト → 次を入れて、また「入れた」

## あなた(AI)がやること
1. /Volumes/*/VIDEO_TS からDVDを検出し、VOBサイズで Title 構成を判別
   - VTS_0X_1 + VTS_0X_2 は concat: で連結。VTS_04(極小)はメニューなので無視
2. ffmpeg で 1タイトルから同時に3つ書き出す:
   - MP4(観る): -c:v h264_videotoolbox -b:v 2500k -c:a aac -b:a 192k -movflags +faststart(解像度は元のまま)
   - WAV(一時): -vn -ac 1 -ar 16000 -c:a pcm_s16le(Whisper用)
   - MP3(聴く): -vn -ac 2 -b:a 128k -c:a libmp3lame
3. python3 transcribe.py <wav> <出力ベース名> で TXT+SRT 生成
4. WAVは削除。出力は ◯回目/ フォルダに整理(mp4+mp3+txt+srt ×3)
5. 抽出(GPU)と文字起こし(CPU)は並走。次の文字起こしは前回完了を待つ
6. 各回終了時に本数・セグメント数を報告

## 安全策
- 容量不足で壊れたら、壊れたコマだけ作り直す(MP4が無事なら音声を取り直してリカバリ可)
- スキップした回が後から来たら、その回番号のフォルダに入れる

③ 文字起こしスクリプト(transcribe.py)

Whisperで TXT と SRT(字幕)を吐くだけの短いスクリプト。モデルは small、言語は日本語固定。

import sys, whisper

wav = sys.argv[1]
base = sys.argv[2]

model = whisper.load_model("small")
result = model.transcribe(wav, language="ja", verbose=False)

with open(base + ".txt", "w") as f:
    f.write(result["text"].strip() + "\n")

def fmt(t):
    h = int(t // 3600); m = int((t % 3600) // 60); s = int(t % 60); ms = int((t - int(t)) * 1000)
    return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"

with open(base + ".srt", "w") as f:
    for i, seg in enumerate(result["segments"], 1):
        f.write(f"{i}\n{fmt(seg['start'])} --> {fmt(seg['end'])}\n{seg['text'].strip()}\n\n")

print("DONE", base, len(result["segments"]), "segments")

④ AIが内部で叩くコマンド(参考)

人間は打たなくてOK。1タイトルから MP4・WAV・MP3 を一度に書き出し、文字起こし後にWAVを消します。

FFMPEG=~/.local/bin/ffmpeg
D="/Volumes/<DVDラベル>/VIDEO_TS"
BASE="◯回目/講義◯回目"

enc(){ "$FFMPEG" -y -i "$1" \
  -map 0:v:0 -map 0:a:0 -c:v h264_videotoolbox -b:v 2500k -c:a aac -b:a 192k -movflags +faststart "$2.mp4" \
  -map 0:a:0 -vn -ac 1 -ar 16000 -c:a pcm_s16le "$2.wav" \
  -map 0:a:0 -vn -ac 2 -b:a 128k -c:a libmp3lame "$2.mp3"; }

enc "concat:$D/VTS_01_1.VOB|$D/VTS_01_2.VOB" "$BASE-1"
enc "concat:$D/VTS_02_1.VOB|$D/VTS_02_2.VOB" "$BASE-2"
enc "$D/VTS_03_1.VOB" "$BASE-3"

for n in 1 2 3; do python3 transcribe.py "$BASE-$n.wav" "$BASE-$n"; done
rm -f "$BASE-"*.wav

⑤ 使い方はこれだけ

  1. DVDを入れる
  2. AIに「◯枚目入れた」と送る
  3. AIが:検出→Title判別→変換→文字起こし→WAV削除→フォルダ整理→自動イジェクト
  4. 出てきたら次を入れて、また「入れた」。くり返し

⑥ つまずきポイント(指示書に書いておくと安全)

  • 容量満杯:壊れたコマだけ作り直す。MP4が無事なら音声を取り直してリカバリ可
  • 飛ばした回:後から来たらその回番号のフォルダへ
  • VTS_04 など極小VOB:メニューなので無視
  • コピーガード(CSS)付きは ffmpeg が直読みできずエラー→別途解除が必要(今回の教材DVDはガード無し)

(おまけ)初めての人向け:インストール手順(macOS)

「ffmpegもWhisperもMac標準では入っていない」ので、最初の1回だけ導入します。ターミナル.app(アプリ→ユーティリティ)を開いて、下のコマンドを上から順に貼って実行するだけ。

① パッケージ管理ツール Homebrew を入れる

Macにソフトを入れるための“入口”。公式サイト(brew.sh)の1行をターミナルに貼ります。

# 1) Homebrew を入れる(パッケージ管理ツール)
# ターミナル.app を開いて、公式の1行を貼って実行
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

② ffmpeg を入れる

# 2) ffmpeg を入れる
brew install ffmpeg
ffmpeg -version   # バージョンが出ればOK

③ Whisper を入れる

Python3 は macOS に最初から入っている /usr/bin/python3 をそのまま使えます。

# 3) Whisper(文字起こしAI)を入れる
#    Python3 は macOS に入っている /usr/bin/python3 を利用
pip3 install -U openai-whisper
#    ↑ "command not found" なら↓で
python3 -m pip install -U openai-whisper

④ 動作テスト

適当な音声・動画ファイルで試して、txt や srt が出てくれば準備完了です。

# 4) 動作テスト(手元の音声/動画ファイルで)
whisper サンプル.mp3 --language ja --model small
#    初回はモデルを自動ダウンロード(数百MB)。txt/srt等が出力されれば成功

もっとお手軽がいい人へ:市販のMac用Whisperアプリ(MacWhisper など)は、ffmpeg相当もWhisperも内包していてインストール作業ほぼ不要。ドラッグ&ドロップで文字起こしできます。「自分で1個だけ手軽に → 市販アプリ」「大量を自動で → 上のコマンド+AI」と使い分けるのがおすすめ。

じゃあ私(筆者)は何をした? → ほぼ何も

ここまでインストール手順を書いておいてなんですが、今回の作業で私自身がやったのは「DVDを入れる・出す」だけ。コマンドは1行も打っていません。なぜ何も要らなかったかというと——

  • 環境は最初の1回で済んでいた:ffmpegとWhisperは以前に自分のMacへ導入済み。だから今回は新規インストールすら不要だった(=上の手順は「初めての人向け」で、私はもう通過済み)。
  • コマンドは全部AIが実行:ディスクの中身判別・連結・変換・文字起こし・不要ファイル削除・フォルダ整理まで、Claude Code(AI)がやってくれた。私は「◯枚目入れた」と打つだけ。
  • トラブル対応もAI任せ:途中でストレージ満杯になった時も、AIが外付けSSDへ退避して壊れたコマだけ作り直した。私は何も操作していない。

つまり、最初の環境構築(ffmpeg+Whisper)と、段取りを書いたMDファイルさえ一度用意すれば、あとは指示書+一言でAIが全部回す。手間は「ディスクの抜き差し」だけに圧縮できる、というのが今回いちばん伝えたかったことです。

まず大前提:外付けDVDドライブが要る(Macは光学ドライブ非搭載)

今のMacにはDVDドライブが付いていません。なので、そもそもディスクを読むには外付け(USB接続)のDVDドライブが必須です。ここがないと何も始まりません。

そして地味に大事なのが「ちゃんと動くドライブを選ぶこと」。安価な製品だと最新のmacOSで認識しない・不安定、という当たりハズレがあります。

私が使っているのはバッファロー(BUFFALO)の外付けDVDドライブ2026年6月時点の最新OSでも問題なくちゃんと動作しています。Mac対応をうたっている定番メーカーのものを選ぶのが、結局いちばんの近道でした。

  • Macは光学ドライブ非搭載 → USB外付けDVDドライブが必須
  • 安物は最新OSで不安定なことがある → Mac対応の定番メーカー推奨
  • 筆者の実機:BUFFALO製で2026年6月の最新OSでも安定動作
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次