FFmpeg で動画や静止画 + 音声を YouTube Live 配信する

Linux,お役立ち情報,プログラム,画像処理ffmpeg,Raspberry Pi,YouTube,YouTube Live,シェルスクリプト,ライブ

FFmpegYouTube Live 配信する方法についてまとめておきます。ここで示すのは以下の方法です。

  1. 既存の映像をランダムで配信する
  2. 静止画と音声を配信する

既存の映像をランダムで配信する

複数の音声付き動画ファイルをランダムに配信するシェルスクリプトです。

#!/bin/sh

stream_key="ストリームキー"

while true
do
  # カレントディレクトリの mp4 ファイルのパスをランダムに取得
  movie_file=`ls -1 *.mp4 | sort -R | head -n 1`

  # 同じコーデック設定で配信
  ffmpeg -re -i ${movie_file} -codec copy \
  -f flv rtmp://a.rtmp.youtube.com/live2/${stream_key}
done

当初は Raspberry Pi を使って配信しようと思ったのですが、フル HD(1920×1080)サイズの動画を流そうとしたらスペックが足りませんでした。

以下のように ls -1 で適当なディレクトリの mp4 ファイル一覧に対し、sort コマンドを使ってランダムに並べ、その一番上だけを head -n 1 で取り出しています。

ls -1 *.mp4 | sort -R | head -n 1

取り出したファイル名を ffmpeg に流してストリーム配信します。while true ループを使って無限ループさせ、止めるまで配信し続けます。tmux などのターミナルマルチプレクサで動かし続けるとずっと配信できるでしょう。

静止画と音声を配信する

常に同じ静止画と音声を順番に BGM として配信するシェルスクリプトです。

#!/bin/sh

stream_key="ストリームキー"
image_file="画像ファイル.jpg"

while true
do
  for audio_file in *.mp3
  do
    ffmpeg -loop 1 -r 30000/1001 \
    -i ${image_file} -i "${audio_file}" \
    -vcodec libx264 -acodec aac -strict experimental -ab 320k -ac 2 -ar 48000 \
    -pix_fmt yuv420p -shortest -f flv rtmp://a.rtmp.youtube.com/live2/${stream_key}
  done
done

これも while true ループを使って無限ループさせ、止めるまで配信し続けます。また audio_file としてカレントディレクトリの mp3 ファイルで for ループさせていますが、上記の動画と同様に sort -R | head -n 1 を組み合わせればランダムにもできます。

上記と同じく tmux などのターミナルマルチプレクサで動かし続けるとずっと配信できます。

他の配信例

Raspberry Pi を使って Web カメラから YouTube ライブを配信する方法を次の記事「FFmpeg を使って YouTube Live にカメラ配信する方法(Raspberry Pi)」で紹介しています。

参考資料