.m3u8とは何のフォーマット?m3u8ファイルの開き方は?
M3U8フォーマットの構造、動作原理、一般的なタグを詳しく解説。PC、スマホ、ウェブでの開き方を紹介します。
続きを読む →TSファイル結合の4つの主要な方法を習得し、最適なソリューションを選びましょう
TS(Transport Stream)はストリーミングコンテナフォーマットの一種で、元々MPEG-2規格で定義され、デジタルテレビ放送やHLSストリーミングなどのシーンで広く使用されています。TSフォーマットの特徴は、動画、音声、字幕などのデータを固定サイズのパケット(通常188バイト)に分割し、各パケットにタイムスタンプと誤り訂正情報を付加している点です。そのため、伝送中に一部のデータが失われても再生を継続できます。
HLS(HTTP Live Streaming)では、動画全体が複数のTSセグメントファイルに分割され、通常各セグメントの長さは2-10秒です。HLS動画のすべてのTSセグメントをダウンロードした後、再生や保存のために1つの完全な動画ファイルに結合する必要があります。
Concat DemuxerはFFmpegが提供するファイル結合方式の一つで、テキストファイルに記載されたファイルリストを読み取って順に結合します。この方法の長所は再エンコードが不要で速度が非常に速く、ほぼすべてのコンテナフォーマットに対応していることです。
まずテキストファイル(例:filelist.txt)を作成し、内容は以下のフォーマットにします:
file 'segment1.ts'
file 'segment2.ts'
file 'segment3.ts'
file 'segment4.ts'
次に以下のFFmpegコマンドを実行します:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
-f concat:concat demuxerの使用を指定-safe 0:絶対パスの使用を許可(デフォルトは相対パスのみ)-i filelist.txt:ファイルリストを指定-c copy:ストリームを直接コピーし、再エンコードしないConcat Protocolは別のシンプルな結合方法で、入力ファイルでconcatプロトコルを使用して複数のファイルを直接結合します。この方法は特定のコンテナフォーマット(MPEG-TS、MPEG-PSなど)にのみ適用されますが、TSファイルには非常に適しています。
ffmpeg -i "concat:segment1.ts|segment2.ts|segment3.ts" -c copy output.mp4
TSファイルの数が多い場合は、ワイルドカード方式を使用できます(シェルのサポートが必要):
ffmpeg -i "concat:$(ls *.ts | sort -V | tr '\n' '|' | sed 's/|$//')" -c copy output.mp4
Concat FilterはFFmpegのフィルタ機能の一つで、フィルタレベルで複数の動画ストリームを結合できます。この方法の特徴は再エンコードが行われるため速度は遅くなりますが、互換性が最も高く、異なるエンコードパラメータのファイルも処理できる点です。
ffmpeg -i segment1.ts -i segment2.ts -i segment3.ts \
-filter_complex "[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mp4
concat=n=3:結合するファイル数を3に指定v=1:出力する動画ストリーム数を1に指定a=1:出力する音声ストリーム数を1に指定[outv][outa]:出力ストリームのラベル名中間ファイル法は比較的伝統的な方法で、すべてのTSファイルをまず1つの大きなTSファイルに結合してから、MP4やその他のフォーマットに再パッケージ化します。この方法はWindowsではcopyコマンドを直接使用でき、非常にシンプルです。
copy /b segment1.ts + segment2.ts + segment3.ts combined.ts
ffmpeg -i combined.ts -c copy output.mp4
cat segment1.ts segment2.ts segment3.ts > combined.ts
ffmpeg -i combined.ts -c copy output.mp4
| 方法 | 速度 | 再エンコード | 適用フォーマット | 推奨度 |
|---|---|---|---|---|
| Concat Demuxer | 非常に速い | なし | ほぼすべてのフォーマット | ★★★★★ |
| Concat Protocol | 非常に速い | なし | MPEGシリーズ | ★★★★ |
| Concat Filter | 遅い | あり | すべてのフォーマット | ★★★ |
| 中間ファイル法 | 速い | なし | TSなどのストリーミングフォーマット | ★★★ |
これは通常、TSセグメントのタイムスタンプが不連続であることが原因です。Concat Filter方法を試すか、-fflags +genptsパラメータを追加してタイムスタンプを再生成してみてください:
ffmpeg -f concat -safe 0 -i filelist.txt -fflags +genpts -c copy output.mp4
セグメントファイルが破損している可能性があります。まずffprobeで各ファイルの完全性を確認するか、Concat Filter方法で再エンコードしてみてください。
TSセグメントは通常1.ts、2.ts、...、10.tsと命名されますが、文字列で直接ソートすると10.tsが2.tsの前に来てしまいます。自然ソート(Linuxのsort -Vなど)を使用するか、ゼロ埋め命名(01.ts、02.ts...)にすることを推奨します。
TSファイルの結合はHLS動画を処理する際の一般的なニーズであり、FFmpegは異なるシーンのニーズを満たすために複数の方法を提供しています。ほとんどの場合、Concat Demuxerが最適な選択肢です。速度が速く、互換性が良く、使用も簡単だからです。エンコードパラメータの不一致などの問題が発生した場合は、Concat Filter方法の使用を検討してください。
コマンドを手動で実行したくない場合は、当社の TSファイル一括結合ツール を直接使用できます。TSセグメントをアップロードするだけでワンクリックでMP4ファイルに結合でき、便利でスピーディーです。
その他の役立つ記事とツール