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形式で出力

アダプティブビットレート配信(複数画質)に対応する方法
複数画質を用意することで、ネットワーク帯域に応じたアダプティブ配信が可能になります。
ステップ:
- 各解像度・ビットレートでセグメントを作成
- マスタープレイリストを作成
コマンド例(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連携も考慮しましょう。






