FFmpegでM3U8ファイルを作る方法:実践コマンドと設定ポイントを徹底解説

はじめに

M3U8ファイルは、HLS(HTTP Live Streaming)配信の中核をなすプレイリスト形式であり、動画をセグメント化しながらスムーズに再生させるための技術的基盤です。この記事では、開発者や技術担当者に向けて、FFmpegを使ったM3U8ファイルの作成方法を、コマンド例と共に丁寧に解説します。

参考記事:

FFmpegとは?

FFmpegは、動画・音声の変換、圧縮、配信などを行えるオープンソースのコマンドラインツールです。業界標準のツールとして、M3U8形式のプレイリスト生成にも広く使われています。

基本のM3U8作成コマンド

単一ビットレートでのHLS配信プレイリスト作成

ffmpeg -i input.mp4 \

  -profile:v baseline -level 3.0 \

  -s 640×360 -start_number 0 \

  -hls_time 10 -hls_list_size 0 \

  -f hls output.m3u8

各オプションの意味

  • -i input.mp4:変換元の動画ファイル
  • -profile:v baseline -level 3.0:互換性の高いエンコード設定(モバイル対応)
  • -s 640×360:解像度指定
  • -hls_time 10:1セグメントの長さ(秒)
  • -hls_list_size 0:すべてのセグメントを含む

-f hls:HLS形式で出力

FFmpeg M3U8 作成方法

アダプティブビットレート配信(複数画質)に対応する方法

複数画質を用意することで、ネットワーク帯域に応じたアダプティブ配信が可能になります。

ステップ:

  1. 各解像度・ビットレートでセグメントを作成
  2. マスタープレイリストを作成

コマンド例(720p / 480p / 360p)

# 720p

ffmpeg -i input.mp4 -vf scale=w=1280:h=720 -c:a aac -ar 48000 \

  -b:v 3000k -c:v h264 -profile:v main -crf 20 -sc_threshold 0 \

  -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod \

  -b:a 128k -hls_segment_filename “output_720p_%03d.ts” output_720p.m3u8

# 同様に480p, 360pも出力する

HLS設計と配信アーキテクチャ:ライブ/VODサービス構築のための実践ガイド

M3U8ストリームを安全に配信するためのセキュリティ実装ガイド

マスタープレイリストの例

#EXTM3U

#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640×360

output_360p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=1400000,RESOLUTION=854×480

output_480p.m3u8

#EXT-X-STREAM-INF:BANDWIDTH=2800000,RESOLUTION=1280×720

output_720p.m3u8

セキュリティ対応(トークン / 暗号化)

配信時には以下の対策も重要です:

  • URLトークン認証(署名付きURL)
  • AES-128によるセグメント暗号化
  • HTTPS経由での配信
  • DRM(Widevine, FairPlayなど)との統合

これらは商用環境においてM3U8を安全に活用するうえで不可欠です。

トラブルシューティングTips

  • 再生できない:プレイリストのURLやCORSヘッダーを確認
  • セグメントが飛ぶ:#EXTINFと実ファイルの秒数が合っているかチェック
  • プレイヤーで認識されない:マスタープレイリストの構造・文字コードをUTF-8で確認

まとめ

FFmpegは、柔軟で高性能なM3U8生成ツールです。動画をHLS形式で配信するための基盤を自動的に構築でき、セグメントの長さ、画質の種類、エンコードの調整も自在です。商用レベルの配信に対応するには、セキュリティ設定や最適なCDN連携も考慮しましょう。

著者について

Truong Dinh Hoang

Truong Dinh Hoang

会長

ソフトウェア・OTT・DX分野で20年以上の経験を持つ連続起業家。 ゼロから400名・200名規模のテック組織をアジアで構築。