フォーマット変換

FlowPick のフォーマット変換に関する完全な技術ガイド——TS/MP4 リマックス原理、FFmpeg WASM ワークフロー、出力フォーマット選択とパフォーマンス比較。

FlowPick はストリーミングメディアをダウンロードすると同時に、セグメントをマージして標準フォーマットに変換できます。本ドキュメントでは、サポートされる変換パス、基盤となる技術原理、出力フォーマットの選択、およびパフォーマンス特性について説明します。


前提概念:コンテナ vs コーデック

フォーマット変換を理解する前に、混同しやすい2つの概念を区別する必要があります:

概念説明類比
コンテナ(Container)ファイルの「外殻」、ファイル拡張子と内部データの編成方式を決定梱包箱——荷物の外形を決定
コーデック(Codec)音声・動画データの圧縮アルゴリズム箱の中に入っている物品

FlowPick のフォーマット変換はコンテナのみを変更し、コーデックは変更しません(いわゆる「リマックス」または Remux)。これは以下を意味します:

  • 動画画質と音声音質は完全に不変
  • 変換速度が高速(再エンコードを伴わない)
  • コーデック形式を変更できない(例:H.265 → H.264)
コーデック形式を変更する必要がある場合(動画圧縮、コーデック変換など)、ネイティブ FFmpeg コマンドラインツールを使用してください。詳細は コマンドライン代替案 を参照。

変換パス概要

FlowPick は以下の変換パスをサポートしており、HLS と DASH という2つの主流ストリーミングプロトコルをカバーしています:

ソース形式ターゲット形式変換方式速度品質典型的なシーン
HLS (TS セグメント)MP4FFmpeg WASM リマックス中等ロスレス一般再生、動画編集
HLS (TS セグメント)TSバイナリ直接連結極速ロスレス速度重視、後続処理
DASH (MP4 セグメント)MP4FFmpeg WASM リマックス中等ロスレス一般再生
DASH (FMP4 セグメント)MP4FFmpeg WASM 再構成中等ロスレス初期化セグメントが必要
DASH (分離音声/動画)MP4FFmpeg WASM マージやや遅いロスレスDASH 音声/動画分離ストリーム

「ロスレス」とは再エンコを行わず、コンテナ形式のみを変更することを指します。動画と音声のコーデックデータは不変です。


変換技術原理

FlowPick は2セットの変換エンジンを使用し、シーンに応じて最適なソリューションを自動的に選択します:

エンジン適用シーンメリットデメリット
FFmpeg WASMTS→MP4 リマックス、DASH マージ、音声/動画マージ機能完全、複雑な変換をサポートWASM ファイルの読み込みが必要、メモリ消費量が高い
TSToMP4MuxerTS→MP4 ストリーミングリマックス純 JS 実装、FFmpeg の読み込み不要、メモリ効率が高いTS→MP4 の単一シーンのみサポート

TS セグメント → MP4(FFmpeg WASM リマックス)

HLS ストリームは通常 MPEG-TS コンテナでカプセル化されます。MP4 へ変換する際、FlowPick は FFmpeg WASM を使用して以下の操作を実行します:

入力:複数の .ts セグメントファイル

処理フロー

  1. すべての TS セグメントを FFmpeg 仮想ファイルシステム(WASM メモリ)に書き込む
  2. concat ファイルリスト(filelist.txt)を生成
  3. リマックスコマンドを実行:
ffmpeg -f concat -safe 0 -i filelist.txt \
  -c copy \
  -movflags +faststart \
  -bsf:a aac_adtstoasc \
  output.mp4

主要パラメータ説明

パラメータ役割必要な理由
-f concatconcat demuxer を使用してセグメントを連結TS セグメントは直接マージできず、demuxer での処理が必要
-safe 0任意のファイルパスを許可WASM 仮想ファイルシステムのパス形式が特殊
-c copyストリームコピーモード、再エンコードなしロスレス変換を保証、最高速度
-movflags +faststartmoov atom をファイル先頭に移動ネットワーク漸進式再生をサポート、ダウンロードしながら視聴可能
-bsf:a aac_adtstoascAAC 音声フォーマット変換TS は ADTS フォーマットを使用、MP4 は ASC フォーマットが必要

パフォーマンス特性

  • エンコード/デコードを伴わないため、CPU 消費量が低い
  • 主な処理時間はファイル I/O(WASM 仮想ファイルシステムの読み書き)
  • 処理速度は約 50-100 MB/s(CPU とセグメント数に依存)

TS セグメント → MP4(TSToMP4Muxer ストリーミングリマックス)

大容量ファイルシーンでは、FlowPick は自社開発の TSToMP4Muxer を優先してストリーミングリマックスを行い、FFmpeg WASM のメモリ制限を回避します:

処理フロー

  1. セごとに TS パケット(188バイト/パケット)を解析し、PES データを抽出
  2. リアルタイムで MP4 フォーマットのメディアデータに変換
  3. Streams API 経由でストリーミング書き込みをディスク(FSA)またはメモリ(Blob)に行う

メリット

  • 純 JavaScript 実装、FFmpeg WASM の読み込み不要(約30MB のメモリ節約)
  • ストリーミング処理、メモリ消費量はファイルサイズに依存しない
  • File System Access API を使用した直接ディスク書き込みをサポート

デメリット

  • TS→MP4 の単一変換パスのみサポート
  • 音声/動画分離マージには非対応
TSToMP4Muxer は FlowPick の中核的なイノベーションの1つです。これにより、ブラウザで GB レベルの動画ファイルを処理することが可能になり、メモリオーバーフローを引き起こしません。詳細は ダウンロードエンジン を参照。

TS セグメント → TS(直接連結)

これが最も高速な「変換」方式です——実際には一切変換を行わず、TS セグメントを順番にバイナリ連結するだけです。

処理フロー

  1. すべての TS セグメントをメモリにダウンロード
  2. 順序通りに ArrayBuffer を単一の Uint8Array に連結
  3. 直接ファイルに書き込む

メリット

  • CPU オーバヘッドゼロ、速度はディスク書き込み速度のみに依存
  • 完全忠実、どのバイトも変更しない
  • 後続で専門ツールを使用して処理するシーンに適している

デメリット

  • ファイルサイズは MP4 よりやや大きくなる可能性がある(TS コンテナのオーバヘッド約 5-15%)
  • 一部のプレイヤーは TS ファイルのサポートが MP4 より劣る

DASH セグメント → MP4

DASH ストリームのセグメントは通常 MP4 または FMP4 フォーマットです。変換プロセス:

標準 MP4 セグメント

ffmpeg -f concat -safe 0 -i filegment_list.txt \
  -c copy \
  -movflags +faststart \
  output.mp4

FMP4 セグメント(初期化セグメントが必要):

ffmpeg -i init.mp4 -i video.mp4 -i audio.mp4 \
  -c:v copy -c:a copy \
  -movflags +faststart \
  output.mp4

音声/動画分離マージ

DASH ストリームの動画と音声は通常異なる AdaptationSet にあります。マージプロセス:

ffmpeg -f concat -safe 0 -i video_list.txt \
  -f concat -safe 0 -i audio_list.txt \
  -c:v copy -c:a copy \
  -movflags +faststart \
  -bsf:a aac_adtstoasc \
  output.mp4
DASH 音声/動画分離は DASH プロトコルの重要な特性であり、プラットフォームが動画と音声に対して独立したビットレートオプションを提供できるようにします。FlowPick は自動的に分離された音声/動画トラックを検出してマージします。詳細は 動画検知 — DASH ストリーム を参照。

出力フォーマット選択ガイド

MP4(推奨)

適用シーン

  • さまざまなプレイヤーやデバイスで再生する必要がある
  • 動画編集ソフトウェア(Premiere、DaVinci Resolve など)にインポートする必要がある
  • 動画プラットフォーム(YouTube、Bilibili など)にアップロードする必要がある
  • 最大互換性を確保する必要がある

技術的詳細

  • コンテナ:MPEG-4 Part 14
  • MIME タイプ:video/mp4
  • H.264/AVC、H.265/HEVC、AAC、MP3 などのコーデックをサポート
  • faststart フラグでネットワーク漸進式再生を保証

TS

適用シーン

  • 最速ダウンロード速度を追求する(リマックスステップをスキップ)
  • 後続で専門ツール(FFmpeg コマンドラインなど)でさらに処理する
  • ソースストリーム自体が TS フォーマットで変換が不要
  • 一時保存、後続で削除する可能性がある

技術的詳細

  • コンテナ:MPEG Transport Stream
  • MIME タイプ:video/mp2t
  • 各セグメントが独立して再生可能
  • ファイルサイズは通常 MP4 より 5-15% 大きい

フォーマット選択決定木

最大互換性が必要? ──はい──→ MP4 を選択
      │
      いいえ
      │
      ▼
最速速度を追求? ──はい──→ TS を選択
      │
      いいえ
      │
      ▼
後続で FFmpeg で処理? ──はい──→ TS を選択
      │
      いいえ
      │
      ▼
    MP4 を選択(推奨)

パフォーマンス比較

以下は典型的な条件下(Chrome 126、Intel i7-13700、16GB RAM)での実測データです:

シーンセグメント数合計サイズTS 連結MP4 リマックス (FFmpeg)MP4 ストリーミング (Muxer)
10分 1080p 動画~60~200 MB<1秒~3秒~2秒
30分 1080p 動画~180~600 MB<1秒~8秒~5秒
60分 4K 動画~360~2.5 GB~2秒~30秒~18秒
120分 4K 動画~720~5 GB~4秒~60秒~35秒

上記データは推定値であり、実際のパフォーマンスは CPU、メモリ、ブラウザ状態に依存します。ストリーミング Muxer は大容量ファイル処理時にメリットがより顕著になります。

変換速度に影響する要因

要因影響度説明
セグメント数セグメントが多いほど、ファイル I/O 回数が増加
ファイル合計サイズ直接的に読み書き時間に影響
CPU パフォーマンスFFmpeg WASM は CPU による demux/mux を必要とする
メモリサイズWASM 仮想ファイルシステムに十分なメモリが必要
ディスク書き込み速度FSA で直接書き込む際に影響较大
ブラウザバージョン新しいバージョンのブラウザは WASM パフォーマンスが向上

制限と注意事項

コーデック形式制限

FlowPick の変換はコンテナ形式のみを変更し、再エンコードを行いません。これは以下を意味します:

制限説明影響
コーデック変換不可H.265 ソースの出力は依然として H.265古いプレイヤーはサポートしない可能性がある
ビットレート変更不可出力ビットレートはソースと一致ファイルサイズを圧縮できない
解像度変更不可出力解像度はソースと一致画質のダウングレードまたはアップグレード不可
フレームレート変更不可出力フレームレートはソースと一致60fps→30fps の変換不可
非標準サンプリングレート出力は元のまま一部のプレイヤーで異常動作の可能性

メモリ制限

FFmpeg WASM はブラウザ内で実行され、以下の制限を受けます:

制限項目具体的数値影響
WASM メモリ上限4GB(32ビットアドレス空間)超大容量ファイルは制限を超える可能性
仮想ファイルシステムメモリに格納ファイルサイズは利用可能なメモリに制限
マルチスレッドモードSharedArrayBuffer が必要正しい COEP/COOP ヘッダーが必要
2GB を超えるファイルの場合、FlowPick は自動的にストリーミング Muxer または TS 直接連結モードを使用し、FFmpeg WASM のメモリ制限を回避します。詳細は ダウンロードエンジン — メモリ管理 を参照。

ブラウザ互換性

機能ChromeEdgeFirefoxSafari
FFmpeg WASM シングルスレッドサポートサポートサポート部分サポート
FFmpeg WASM マルチスレッドCOEP/COOP が必要COEP/COOP が必要COEP/COOP が必要非サポート
TSToMP4Muxer ストリーミングサポートサポートサポートサポート
TS 直接連結サポートサポートサポートサポート
ブラウザ互換性の詳細については、ブラウザ互換性 を参照してください。

コマンドライン代替案

コマンドラインに慣れている場合、ネイティブ FFmpeg を使用してより良いパフォーマンスを得ることができます:

# HLS → MP4
ffmpeg -i "https://example.com/playlist.m3u8" -c copy -bsf:a aac_adtstoasc output.mp4

# DASH → MP4
ffmpeg -i "https://example.com/manifest.mpd" -c copy output.mp4

# TS セグメントマージ
cat segment_*.ts > output.ts

# TS → MP4 リマックス
ffmpeg -i output.ts -c copy -bsf:a aac_adtstoasc output.mp4

ネイティブ FFmpeg のメリット:

メリット説明
ブラウザメモリ制限なし全システムメモリを使用可能
ハードウェアアクセラレーションエンコード/デコードNVENC、QSV、VideoToolbox などをサポート
より多くのフォーマットとコーデック数百種類のフォーマットとコーデックをサポート
処理速度が高速ネイティブコードのパフォーマンスは WASM を大幅に上回る
再エンコードをサポートコーデック形式、ビットレート、解像度の変更が可能

よくある質問

変換後の MP4 ファイルが TS より小さいのはなぜですか?

TS コンテナは各 188 バイトのパケットにパケットヘッダーのオーバヘッドがあり、MP4 コンテナのインデックス構造はよりコンパクトです。リマックス後、ファイルサイズは通常 5-15% 減少しますが、音声・動画データは完全に不変です。

変換で画質が損なわれますか?

いいえ。 FlowPick は -c copy(ストリームコピー)モードを使用し、コンテナ形式のみを変更し、再エンコードを行いません。動画と音声のすべてのバイトがそのまま保持されます。

なぜ一部の動画は変換後に再生できないのですか?

考えられる原因:

  • ソース動画があなたのプレイヤーがサポートしないコーデック(H.265 など)を使用している
  • 変換プロセスでセグメントが欠落し、ファイルが不完全になっている
  • ソースストリーム自体に問題がある
再生問題が発生した場合は、よくある問題のトラブルシューティング既知の問題 を参照してください。

関連ドキュメント