mcpField
F
ffmpeg-streaming

ffmpeg-streaming

github.com/josiahsiegelクリエイティブ・メディア5983 回インストール19 週間前に更新
リポジトリ

ffmpeg-streaming について

ライブ配信とオンデマンド配信のワークフロー向けFFmpegスキルです。RTMP、HLS、DASH、SRT、WebRTCなどの設定例を収録し、ライブ出力、アダプティブビットレート、低遅延配信を扱います。

主な機能

  1. 01RTMP、HLS、DASH、SRTの設定
  2. 02低遅延HLS、DASH、WebRTC出力の構成
  3. 03アダプティブビットレート配信の作成
  4. 04暗号化ストリーミング出力の設定
  5. 05エンコードとトラブルシューティングの参照

活用シーン

  1. 01Twitch、YouTube、Facebookへの配信
  2. 02ウェブ再生やVOD向けHLS・DASH出力の作成
  3. 03低遅延ライブ配信の構成
  4. 04ストリーミングプロトコル間のコンテンツ中継

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill ffmpeg-streaming

インストール後、Claude Code で/ffmpeg-streamingを入力して読み込まれたか確認します。

同梱ファイルreferences/production-and-troubleshooting.md

詳細

重要なガイドライン

Windows のファイルパス要件

必須:Windows ではファイルパスに常にバックスラッシュを使用してください

Windows で Edit または Write ツールを使用する場合、ファイルパスにはスラッシュ(/)ではなく、必ずバックスラッシュ(\)を使用してください。


クイックリファレンス

プロトコルレイテンシ出力形式最適な用途
RTMP2-5s-f flv rtmp://...Twitch、YouTube への入力
HLS10-30s-f hls output.m3u8Web 再生、CDN
LL-HLS2-5s-hls_flags low_latency低レイテンシの Web 配信
SRT<1s-f mpegts srt://...信頼性の高い番組素材の伝送
DASH10-30s-f dash output.mpdABR ストリーミング
プラットフォーム入力 URL
Twitchrtmp://live.twitch.tv/app/{key}
YouTubertmp://a.rtmp.youtube.com/live2/{key}
Facebookrtmps://live-api-s.facebook.com:443/rtmp/{key}

このスキルを使用する場面

ライブストリーミングのワークフローで使用します。

  • Twitch、YouTube、Facebook への配信
  • VOD 用の HLS/DASH サーバーの設定
  • ABR エンコードラダーの構築
  • 低レイテンシのストリーミング要件
  • 複数の配信先への再配信

FFmpeg ストリーミングガイド(2025)

RTMP、HLS、DASH、SRT、WebRTC プロトコルを網羅した、FFmpeg によるライブストリーミングの完全ガイドです。

現在の最新バージョン:FFmpeg 8.0.1(2025-11-20 リリース)— ffmpeg -version で確認してください。

ストリーミングプロトコルの概要

プロトコルの比較(2025)
プロトコルレイテンシ互換性セキュリティ用途
RTMP1-5sレガシー、入力TLS(RTMPS)ストリームの入力
HLS6-30s汎用AES-128CDN 配信
DASH6-30s広範DRM 対応ABR ストリーミング
LL-HLS2-4sApple/最新環境AES-128低レイテンシ
LL-DASH2-4s最新のブラウザーDRM 対応低レイテンシ
SRT<1s普及拡大中AES-128/256番組素材の伝送
WebRTC<0.5sブラウザーDTLS/SRTPリアルタイム
WHIP<1s新興TLSWebRTC 入力
2025 年のトレンド
  • 番組素材の伝送/入力では、RTMP に代わって SRT が普及
  • Apple エコシステムでは LL-HLS が標準になりつつあります
  • WHIP による WebRTC 入力の標準化(FFmpeg 8.0+)
  • 低レイテンシ配信を実現する QUIC/HTTP3 が台頭

RTMP ストリーミング

基本的な RTMP ストリーム
# Stream to RTMP server
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key
Web カメラ/画面から RTMP へ
# Linux webcam
ffmpeg -f v4l2 -i /dev/video0 \
  -f alsa -i default \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2500k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key

# macOS webcam
ffmpeg -f avfoundation -framerate 30 -i "0:0" \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2500k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key

# Windows screen capture
ffmpeg -f gdigrab -framerate 30 -i desktop \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 3000k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key
GPU エンコードを使用した RTMP
# NVIDIA NVENC
ffmpeg -re -i input.mp4 \
  -c:v h264_nvenc -preset p3 -tune ll -zerolatency 1 -b:v 6000k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key

# Intel QSV
ffmpeg -re -init_hw_device qsv=hw -filter_hw_device hw \
  -i input.mp4 \
  -c:v h264_qsv -preset fast -b:v 6000k \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream_key
RTMPS(暗号化)
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k \
  -c:a aac -b:a 128k \
  -f flv rtmps://secure-server/live/stream_key
Twitch/YouTube/Facebook
# Twitch
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 6000k -maxrate 6000k -bufsize 12000k \
  -g 60 -keyint_min 60 \
  -c:a aac -b:a 160k -ar 44100 \
  -f flv rtmp://live.twitch.tv/app/YOUR_STREAM_KEY

# YouTube
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 4500k -maxrate 4500k -bufsize 9000k \
  -g 60 -keyint_min 60 \
  -c:a aac -b:a 128k -ar 44100 \
  -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY

# Facebook
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 4000k -maxrate 4000k -bufsize 8000k \
  -g 60 \
  -c:a aac -b:a 128k -ar 44100 \
  -f flv rtmps://live-api-s.facebook.com:443/rtmp/YOUR_STREAM_KEY

HLS ストリーミング

基本的な HLS 出力
# Create HLS stream
ffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -hls_time 6 \
  -hls_list_size 0 \
  -hls_segment_filename "segment_%03d.ts" \
  playlist.m3u8
ライブ HLS ストリーミング
# Live HLS with rolling window
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k \
  -c:a aac -b:a 128k \
  -hls_time 4 \
  -hls_list_size 10 \
  -hls_flags delete_segments \
  -hls_segment_filename "live_%03d.ts" \
  live.m3u8
アダプティブビットレート HLS(ABR)
# Multi-bitrate HLS
ffmpeg -i input.mp4 \
  -filter_complex "[0:v]split=3[v1][v2][v3]; \
    [v1]scale=1920:1080[v1out]; \
    [v2]scale=1280:720[v2out]; \
    [v3]scale=854:480[v3out]" \
  -map "[v1out]" -c:v:0 libx264 -b:v:0 5000k -maxrate:v:0 5350k -bufsize:v:0 7500k \
  -map "[v2out]" -c:v:1 libx264 -b:v:1 2800k -maxrate:v:1 2996k -bufsize:v:1 4200k \
  -map "[v3out]" -c:v:2 libx264 -b:v:2 1400k -maxrate:v:2 1498k -bufsize:v:2 2100k \
  -map a:0 -c:a:0 aac -b:a:0 192k \
  -map a:0 -c:a:1 aac -b:a:1 128k \
  -map a:0 -c:a:2 aac -b:a:2 96k \
  -f hls \
  -hls_time 6 \
  -hls_list_size 0 \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
  -master_pl_name master.m3u8 \
  -hls_segment_filename "stream_%v/segment_%03d.ts" \
  stream_%v/playlist.m3u8
AES 暗号化を使用した HLS
# Generate encryption key
openssl rand 16 > enc.key
echo "http://example.com/enc.key" > enc.keyinfo
echo "enc.key" >> enc.keyinfo
openssl rand -hex 16 >> enc.keyinfo

# Encrypted HLS
ffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -hls_time 6 \
  -hls_key_info_file enc.keyinfo \
  -hls_segment_filename "encrypted_%03d.ts" \
  encrypted.m3u8
低レイテンシ HLS(LL-HLS)
# LL-HLS with partial segments
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -c:a aac \
  -hls_time 4 \
  -hls_list_size 6 \
  -hls_flags independent_segments+delete_segments \
  -hls_segment_type fmp4 \
  -hls_fmp4_init_filename init.mp4 \
  -hls_segment_filename "ll_%03d.m4s" \
  ll_playlist.m3u8

DASH ストリーミング

基本的な DASH 出力
ffmpeg -i input.mp4 \
  -c:v libx264 -c:a aac \
  -f dash \
  -seg_duration 4 \
  -use_timeline 1 \
  -use_template 1 \
  output.mpd
アダプティブ DASH
ffmpeg -i input.mp4 \
  -map 0:v -map 0:v -map 0:v -map 0:a \
  -c:v libx264 -c:a aac \
  -b:v:0 5M -s:v:0 1920x1080 \
  -b:v:1 3M -s:v:1 1280x720 \
  -b:v:2 1M -s:v:2 640x360 \
  -b:a 128k \
  -f dash \
  -seg_duration 4 \
  -adaptation_sets "id=0,streams=v id=1,streams=a" \
  manifest.mpd
低レイテンシ DASH(LL-DASH)
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset ultrafast -tune zerolatency \
  -c:a aac \
  -f dash \
  -seg_duration 1 \
  -frag_duration 0.1 \
  -streaming 1 \
  -ldash 1 \
  -use_timeline 0 \
  -use_template 1 \
  -remove_at_exit 1 \
  -window_size 5 \
  ll_manifest.mpd

SRT ストリーミング(FFmpeg 4.0+)

SRT リスナー(サーバーモード)
# FFmpeg as SRT server
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k \
  -c:a aac -b:a 128k \
  -f mpegts "srt://0.0.0.0:9000?mode=listener"
SRT 発信側(クライアントモード)
# Send to SRT server
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -b:v 3000k \
  -c:a aac -b:a 128k \
  -f mpegts "srt://server:9000?mode=caller"
暗号化を使用した SRT
# AES-128 encrypted SRT
ffmpeg -re -i input.mp4 \
  -c:v libx264 -c:a aac \
  -f mpegts "srt://server:9000?passphrase=mySecretKey123&pbkeylen=16"
SRT ストリームの受信
# Receive and save
ffmpeg -i "srt://0.0.0.0:9000?mode=listener" \
  -c copy output.mp4

# Receive and transcode
ffmpeg -i "srt://server:9000?mode=caller" \
  -c:v libx264 -c:a aac \
  output.mp4

WebRTC/WHIP(FFmpeg 8.0+)

概要

FFmpeg 8.0 では WHIP(WebRTC-HTTP Ingestion Protocol)マルチプレクサーが導入され、WebRTC エンドポイントへのサブ秒レイテンシのストリーミングが可能になりました。WHIP は WebRTC 入力の標準になりつつあり、独自ソリューションに取って代わりつつあります。

WHIP 出力
# Stream to WHIP endpoint
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset ultrafast -tune zerolatency \
  -c:a libopus \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"

# Low-latency webcam to WHIP (Linux)
ffmpeg -f v4l2 -i /dev/video0 \
  -f pulse -i default \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2500k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"

# Low-latency webcam to WHIP (macOS)
ffmpeg -f avfoundation -framerate 30 -i "0:0" \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 2500k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"

# Low-latency screen capture to WHIP (Windows)
ffmpeg -f gdigrab -framerate 30 -i desktop \
  -c:v libx264 -preset ultrafast -tune zerolatency -b:v 3000k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"
ハードウェアエンコードを使用した WHIP
# NVIDIA NVENC WHIP streaming
ffmpeg -hwaccel cuda -hwaccel_output_format cuda \
  -i input.mp4 \
  -c:v h264_nvenc -preset p3 -tune ll -zerolatency 1 -b:v 3000k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"

# Intel QSV WHIP streaming
ffmpeg -init_hw_device qsv=hw -filter_hw_device hw \
  -i input.mp4 \
  -c:v h264_qsv -preset fast -b:v 3000k \
  -c:a libopus -b:a 64k \
  -f whip \
  "https://whip-server.example.com/publish/stream_id"
WHIP 認証
# With bearer token authentication
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset ultrafast -tune zerolatency \
  -c:a libopus \
  -f whip \
  -headers "Authorization: Bearer YOUR_TOKEN" \
  "https://whip-server.example.com/publish/stream_id"
WHIP サーバー/プラットフォーム
  • Cloudflare Stream — WHIP 経由の WebRTC 入力
  • Dolby.io — インタラクティブストリーミング
  • Janus — オープンソースの WebRTC ゲートウェイ
  • mediasoup — WHIP に対応したオープンソースの SFU
  • LiveKit — WHIP 入力に対応した WebRTC プラットフォーム

マルチキャスト、再ストリーミング、本番環境のパターンとトラブルシューティング

マルチキャストストリーミングのセットアップ、プロトコル間の再ストリーミング(RTMP/HLS/DASH/SRT の相互変換)、本番環境のパターン(エンコーダープロファイル、ABR ラダー、モニタリング)、ストリーミングのトラブルシューティング集については、references/production-and-troubleshooting.md に記載されています。プロトコル間をつなぐ場合、本番環境向けの ABR パイプラインを構築する場合、またはストリーミングの障害を診断する場合は、このリファレンスを読み込んでください。

ベストプラクティス

  1. 適切なキーフレーム間隔を設定する - ライブストリーミングでは 2 秒にします
  2. ビットレートを帯域幅に合わせる - 20% の余裕を確保します
  3. ストリーミングには CBR を使用する - 帯域幅を一定に保ちます
  4. VOD では faststart を有効にする - -movflags +faststart
  5. ストリームの状態を監視する - ドロップやエラーがないか確認します
  6. ハードウェアエンコーディングを使用する - GPU オフロードには NVENC/QSV を使用します
  7. ABR を実装する - 複数の品質レベルを用意します
  8. ストリームを保護する - RTMPS/暗号化を使用します
  9. フェイルオーバーをテストする - バックアップの取り込みポイントを用意します
  10. すべてをログに記録する - デバッグには -report を使用します

このガイドでは、FFmpeg ストリーミングの基礎を説明します。ハードウェアアクセラレーションについては、ハードウェアアクセラレーションのスキルを参照してください。

コメント