FFmpegでYouTubeにライブ配信する方法 - コマンド解説
FFmpegはコマンドラインで動画・音声を扱えるツール。サーバー上で動かせるので、OBSのようなGUIなしで24時間配信ができます。この記事ではFFmpegの配信コマンドを1つずつ解説します。
基本コマンド:1本の動画をループ配信
ffmpeg -re -stream_loop -1 -i video.mp4 \ -c:v libx264 -preset ultrafast -b:v 2500k \ -c:a aac -b:a 128k \ -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_KEY
オプション解説
-re— リアルタイム速度で読み込み(これがないと高速で送信してしまう)-stream_loop -1— 無限ループ(-1 = 無限)-i video.mp4— 入力ファイル-c:v libx264— H.264でエンコード-preset ultrafast— エンコード速度(CPU負荷が最小)-b:v 2500k— 映像ビットレート(720pなら2500k推奨)-c:a aac— 音声をAACでエンコード-b:a 128k— 音声ビットレート-f flv— 出力フォーマット(RTMPはFLV必須)
CPU負荷を減らす:copy mode
動画が既にH.264+AACの場合、再エンコードせずにそのまま送信できます。
ffmpeg -re -stream_loop -1 -i video_optimized.mp4 \ -c:v copy -c:a copy \ -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_KEY
-c:v copy -c:a copy でエンコード処理をスキップ。CPU使用率がほぼ0%になります。ただし入力動画がYouTubeの推奨仕様に合っている必要があります。
copy modeに必要な動画仕様
- コーデック: H.264 (Baseline or Main profile)
- 音声: AAC, 44100Hz, ステレオ
- キーフレーム間隔: 2秒
- コンテナ: MP4 (movflags +faststart)
事前に最適化するコマンド
ffmpeg -i input.mp4 \ -vf "scale=1280:720" \ -c:v libx264 -preset medium -b:v 1500k \ -g 48 -keyint_min 48 -r 24 \ -c:a aac -b:a 128k -ar 44100 -ac 2 \ -movflags +faststart \ output_stream.mp4
この変換を一度やっておけば、配信時はcopy modeで済みます。
複数動画をプレイリストで配信
FFmpegの「concat」機能を使います。まずプレイリストファイルを作成:
# playlist.txt file '/path/to/video1.mp4' file '/path/to/video2.mp4' file '/path/to/video3.mp4'
配信コマンド:
ffmpeg -re -stream_loop -1 \ -f concat -safe 0 -i playlist.txt \ -c:v copy -c:a copy \ -f flv rtmp://a.rtmp.youtube.com/live2/YOUR_KEY
自動復旧スクリプト
FFmpegが落ちたら自動で再起動するシェルスクリプト:
#!/bin/bash
while true; do
ffmpeg -re -stream_loop -1 \
-f concat -safe 0 -i playlist.txt \
-c:v copy -c:a copy \
-f flv rtmp://a.rtmp.youtube.com/live2/YOUR_KEY
echo "FFmpeg stopped. Restarting in 5 seconds..."
sleep 5
done
最低限の自動復旧。ただしこれだとエラーの種類を区別できず、ログ管理もできません。
FFmpeg手動管理の限界
- プレイリストの更新(動画の追加・削除)に再起動が必要
- ストリームキーの管理が平文
- 複数チャンネルの同時配信が大変
- ログの監視・アラートは自分で組む必要がある
- Web UIがないのでSSH必須