TVTest・EDCB・PT3で録画した .ts ファイル、あるいはBlu-rayから取り出した .m2ts は、そのままでは編集ソフトやスマホで扱いづらい形式です。FFmpegなら無劣化(再エンコードなし)でMP4化でき、処理時間は数秒〜数十秒。CMカット・字幕・Droppedパケット対策まで含めて解説します。所要時間:10分。

動作確認: FFmpeg 6.1 / Windows 11(64bit公式ビルド)

前提: 本記事は自己視聴目的の録画ファイルを扱うことを前提とします。放送コンテンツの配布・再アップロードは著作権法・放送法の観点から行わないでください。


この記事でわかること

  1. TS / m2ts / BDAV の違い
  2. 最速・無劣化リムックス(-c copy
  3. aac_adtstoasc エラーの解消
  4. PCR wraparound(1時間で切れる問題)の原因と対策
  5. CM部分の切り出し(複数区間)
  6. ARIB字幕の扱い(保持 or 削除)
  7. ドロップパケットがある録画の修復
  8. FAQ

1. TS / m2ts / BDAV の違い

形式主な用途特徴
.ts (MPEG-TS)地デジ録画・ストリーミングH.264+AAC(日本の地デジはH.264+AAC-LC or HE-AAC)、パケット長188byte
.m2tsBlu-ray / BDAVH.264またはHEVC、AC-3またはDTS-HD
.mtsAVCHDカメラ基本 .m2ts と同じ、AVCHD仕様

いずれも中身はMP4と互換性があるストリーム(H.264/HEVC + AAC/AC-3)なので、コンテナだけMP4に差し替えるリムックスが最も効率的です。


2. 最速・無劣化リムックス

基本コマンドはこれだけです。

ffmpeg -i input.ts -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4
  • -c copy … 再エンコードなし、数秒で完了
  • -bsf:a aac_adtstoasc … AACの ADTS ヘッダを ASC に変換(MP4必須)
  • -movflags +faststart … moovを先頭に(Web・スマホ再生に必須)

なぜ aac_adtstoasc が必要?
TSのAAC音声は各フレームに ADTS(Audio Data Transport Stream)ヘッダが付いていますが、MP4は ASC(AudioSpecificConfig)をコンテナに1回書くだけの形式。この変換をしないと「Malformed AAC bitstream detected」エラーで出力が壊れます。

字幕を落としてシンプルに

地デジTSにはARIB字幕が埋め込まれていることが多く、MP4互換ではありません。字幕を無視して映像+音声だけ出力:

ffmpeg -i input.ts -map 0:v -map 0:a -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

3. PCR wraparound 問題(1時間で切れる)

症状

長尺TS(スポーツ中継・ドラマ一挙放送など)をリムックスすると、1時間前後で出力ファイルが突然終わる

原因

TSはPCR(Program Clock Reference)というタイムスタンプを33bitで表現します。最大値は約26.5時間ですが、FFmpegのデフォルト設定では不連続を検知すると処理を打ち切る場合があります。また32bit版FFmpegではさらに制限がかかり、長時間の扱いで不安定になります。

対策

対策1: 64bit公式ビルドを使う

Windowsなら gyan.dev の ffmpeg-full 64bit版を使用してください。32bit版は絶対に避けます。

対策2: タイムスタンプ不連続を許容する

ffmpeg -fflags +genpts -i input.ts -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4
  • -fflags +genpts … 入力のPTS(提示タイムスタンプ)を再生成

対策3: 極端に長いTSを分割してから処理

# 1時間ずつに分割
ffmpeg -i input.ts -c copy -map 0 -f segment -segment_time 3600 -reset_timestamps 1 part_%03d.ts

分割後、それぞれをMP4化して後でconcatする方法です。


4. CM部分の切り出し(複数区間)

TS録画で「本編だけ抜き出したい」場合の典型手順です。

手順1: まず開始・終了時刻を調べる

再生しながら、本編の区切り時刻をメモします(例:00:01:30 から 00:25:00、00:28:00 から 00:52:30 が本編の2パート)。

手順2: 部分切り出し(再エンコードなし)

# パート1 (1分30秒〜25分0秒)
ffmpeg -ss 00:01:30 -to 00:25:00 -i input.ts -c copy -bsf:a aac_adtstoasc part1.ts

# パート2 (28分〜52分30秒)
ffmpeg -ss 00:28:00 -to 00:52:30 -i input.ts -c copy -bsf:a aac_adtstoasc part2.ts

手順3: 2つをconcatしてMP4に

# concat.txt を作成
echo "file 'part1.ts'" > concat.txt
echo "file 'part2.ts'" >> concat.txt

# 結合
ffmpeg -f concat -safe 0 -i concat.txt -c copy -bsf:a aac_adtstoasc -movflags +faststart main.mp4

キーフレーム精度でカットしたい場合は、事前に -ss の位置をキーフレーム位置に合わせる必要があります。詳しくは動画トリミング完全ガイドを参照。


5. ARIB字幕の扱い

地デジTSの字幕(クローズドキャプション)は ARIB STD-B24 形式。FFmpegは保持はできますが、MP4再生プレーヤーの多くは表示できません。選択肢は2つ:

選択肢A: 字幕を削除(推奨)

ffmpeg -i input.ts -map 0:v -map 0:a -c copy -bsf:a aac_adtstoasc -movflags +faststart output.mp4

-map 0:v -map 0:a で映像・音声ストリームのみ選択。字幕ストリームは出力に含まれません。

選択肢B: 字幕を抽出してSRTに変換

ARIBからSRTへの変換はFFmpeg単体では難しいため、Caption2Ass_PCRTSSplitter など別ツールを使い、SRT/ASS化してから焼き込みます:

# 字幕をSRTで焼き込み(事前に subtitle.srt を用意)
ffmpeg -i input.ts -vf "subtitles=subtitle.srt:force_style='FontName=Meiryo,FontSize=20'" \
  -c:a copy -bsf:a aac_adtstoasc -movflags +faststart output_subbed.mp4

字幕焼き込みの詳細は字幕を動画に焼き込む(hardcode)完全ガイド参照。


6. ドロップパケットがある録画の修復

電波状況が悪いときの録画は TSパケットにドロップがあり、リムックスでエラーが出ることがあります。

対策コマンド

ffmpeg -err_detect ignore_err -i input.ts -c copy -bsf:a aac_adtstoasc \
  -fflags +genpts -movflags +faststart output.mp4
  • -err_detect ignore_err … パケットエラーを無視して処理継続
  • -fflags +genpts … 失われたタイムスタンプを再生成

再生時に1〜2秒のカクつきが残ることがありますが、完全に壊れたファイルが救出できます。


7. BDAV(Blu-ray)からの取り出し

BDAVディスク(BDMV/STREAM/00001.m2ts 等)から直接変換する場合:

ffmpeg -i BDMV/STREAM/00001.m2ts -c:v copy -c:a copy -map 0:v:0 -map 0:a:0 \
  -movflags +faststart output.mp4

AACS暗号化されているBlu-rayは復号しない限りFFmpegで処理できません。AACS Error。私的コピーでも、技術的保護手段の回避は著作権法第30条1項2号により違法です。


8. バッチ処理(複数TSを一括MP4化)

Windowsバッチファイル例(ts_to_mp4.bat として保存、TSをドラッグ&ドロップ):

@echo off
setlocal enabledelayedexpansion
if "%~1"=="" (
  echo 使い方: TSファイルをこの.batにドラッグしてください
  pause & exit /b 1
)
:loop
if "%~1"=="" goto end
echo 変換中: %~nx1
ffmpeg -fflags +genpts -i "%~1" -c copy -bsf:a aac_adtstoasc -movflags +faststart "%~dpn1.mp4"
shift
goto loop
:end
echo すべて完了!
pause

bash版:

for f in *.ts; do
  ffmpeg -fflags +genpts -i "$f" -c copy -bsf:a aac_adtstoasc -movflags +faststart "${f%.ts}.mp4"
done

9. トラブルシューティング

エラー1: Malformed AAC bitstream detected

原因: -bsf:a aac_adtstoasc を忘れた。
解決策: オプションを追加する。

エラー2: 変換はできたが再生できない(スマホ)

原因: 地デジは 1440×1080 のSD横比など特殊なアスペクト比。スマホが誤判定する場合がある。
解決策: -vf "scale=1920:1080:flags=lanczos" で明示的に1920×1080にリスケール(※ただし再エンコード必要)。

エラー3: 音声が2つある(副音声・二ヶ国語)

原因: 地デジの二ヶ国語放送やステレオ+モノラル併録は音声が複数ストリームある。
解決策:

# 主音声だけ
ffmpeg -i input.ts -map 0:v:0 -map 0:a:0 -c copy -bsf:a aac_adtstoasc output.mp4

# 両方保持(Windows Media Player では切り替えられる)
ffmpeg -i input.ts -map 0 -c copy -bsf:a aac_adtstoasc output.mp4

エラー4: チャプターが消える

原因: TSのチャプター情報はMP4と形式が違う。
解決策: -map_chapters 0 を追加する。ただしTS→MP4ではチャプターが完全には移行しないことが多く、手動で書き直す必要あり。

エラー5: BS4K(ISDB-S3、4K放送)が変換できない

原因: BS4KはHEVC + MPEG-H 3Dオーディオ(M-PEG-4 AAC)で、標準的なMP4リーダーで再生できない場合がある。
解決策: 音声を AAC-LC に再エンコード:

ffmpeg -i bs4k.ts -c:v copy -c:a aac -b:a 192k -ac 2 -movflags +faststart output.mp4

FAQ

Q1. TsSplitter で分割してからFFmpegに渡すべき?
A. 昔は必要でしたが、最新のFFmpeg(6.x以降)は地デジTSを直接扱えるので、ほとんどの場合 FFmpeg 単体で十分です。ドロップが激しい録画のみTsSplitterの事前修復が有効なことがあります。

Q2. BonDriver+TVTest録画のファイルは .ts ですが、なぜ拡張子 .m2ts ではない?
A. 日本の地デジは MPEG-TS (188 byte packets) で保存され、拡張子も .ts が慣例です。BDAVは .m2ts(192 byte packets)で同じTSにタイムスタンプを追加した形式。どちらもFFmpegで同じように扱えます。

Q3. リムックスすると画質が落ちる?
A. 落ちません。-c copy はビットストリームをそのままコピーするので、1ビットも変わりません。

Q4. 変換後ファイルが再生できない動画プレーヤーがある
A. -movflags +faststart の有無、-tag:v hvc1(HEVC録画の場合)の有無を確認。それでも駄目なら H.264 に再エンコード:

ffmpeg -i input.ts -c:v libx264 -crf 20 -c:a aac -b:a 192k -bsf:a aac_adtstoasc -movflags +faststart output.mp4

Q5. なぜ地デジ録画にこんなに面倒が多い?
A. 地デジTSは放送局側の多重化仕様(ARIB STD-B10/B32)を忠実に保存したデータで、字幕・データ放送・番組情報(EIT)・緊急警報(EAS)等も含む巨大なストリームです。MP4は「ただのファイル」なので、これらを捨てて本編だけ取り出すのがFFmpegの役割です。


関連リソース

FFmpeg チートシート(PDF):リムックス・コンテナ変換・bsfオプションのよく使うコマンドをA4一枚に。

関連記事


動作確認: ffmpeg 6.1.1 / Windows 11 (64bit) + Ubuntu 24.04
一次ソース: ffmpeg.org/ffmpeg.html / ffmpeg.org/ffmpeg-formats.html