Twitch.tv を使ってストリーミング

提供: ArchWiki
2023年10月16日 (月) 20:31時点におけるKgx (トーク | 投稿記録)による版 (→‎Ffmpeg の方法: 情報を更新)
ナビゲーションに移動 検索に移動

Twitch.tv は RTMP ベースの人気のストリーミングサービスの一つです。Steam には Linux クライアントがあるため、ゲームや Linux デスクトップをストリーミングする方法を探している人がいるかもしれません。このページではそのような方法のリストとして情報を提供しています。

Twitch ストリーミングガイドライン

Twitch.tv サポート より:

ビデオ要件

  • コーデック: H.264 (x264)
  • モード: Strict CBR
  • キーフレーム間隔: 2秒

オーディオ要件

  • コーデック: AAC-LC ステレオまたはモノ音声
  • 最大ビットレート: 160 kbps
  • サンプリング周波数: 任意
    ノート: MP3 コーデックのサポートは廃止されました

他の要件

Twitch のページで記載されていないものとして Y'UV420p ピクセルフォーマット の要件があります、Y'UV444 はあまりサポートされていません。

GUI の方法

  • Open Broadcaster Software (obs-studio) は人気のあるストリーミングプログラムです。公式リポジトリからインストールできます。Linux 版のアルファビルドも利用することができます (obs-studio-gitAUR)
  • castawesomeAUR は ffmpeg ストリーミングの Gtk3 フロントエンドで Twitch.tv のサポートが付いています。
  • SimpleScreenRecorder (simplescreenrecorder) を使って twitch にストリーミングすることもできます。
    • コンテナは FLV に設定してください。
    • RTMP の URL を 'save as' フィールドに記入してください。
    • 'separeate file per segment' のチェックが外れていることを確認してください。
    • 動画のコーデックは libx264 に設定 (H.264 ではありません)。
    • ビットレートは 2000 kbps などに設定。
    • カスタムオプションフィールドに preset=fast,minrate=2000,maxrate=2000,bufsize=2000,keyint=60 と入力。
ノート: 'minrate', 'maxrate', 'bufsize' の値は同じにしてください。

CLI の方法

FFmpeg

次のソリューションでは、Twitch.tv へのストリーミングに FFmpeg を利用します。

.bashrc スクリプトを使う方法

FFmpeg を使用して Twitch.tv にストリーミングするために、デスクトップ要素と OpenGL 要素の両方のストリーミングをサポートします。このスクリプトは、シェル内で stream-to-twitch path/to/stream_key を実行することで呼び出すことができます。キーは pass で安全に保存されています。スクリプトは次のとおりです。

/usr/local/sbin/stream-to-twitch
#!/usr/bin/env sh
#
# Stream screen and audio (speakers and microphone) to Twitch.tv using FFmpeg.
#
# Usage: stream-to-twitch path/to/key

set -euo pipefail

#######################################
# Stream to Twitch.tv.
# Globals:
#   None.
# Arguments:
#   Stream key. A string.
# Returns:
#   None.
#######################################
stream_to_twitch() {
    res_input="1920x1080" # input resolution
    res_output="1280x720" # output resolution
    fps="30" # target FPS
    gop="60" # i-frame interval, should be double of fps
    gop_min="30" # min i-frame interval, should be equal to fps
    probesize="42M" # https://stackoverflow.com/a/57904380
    threads="2" # max 6
    cbr="1000k" # constant bitrate (should be between 1000k–3000k)
    quality="ultrafast" # one of the many FFmpeg presets
    audio_input_speakers="0" # speakers' sink id
    audio_input_mic="default" # microphone's sink id
    audio_rate="44100"
    stream_server="live-prg" # see https://stream.twitch.tv/ingests for list
    stream_key="${1}" # key will be passed as an agument from the command line
    loglevel="warning" # supress unecessary information from printing

    ffmpeg \
        -loglevel "${loglevel}" \
        -f x11grab -s "${res_input}" -r ${fps} -probesize ${probesize} -i :0.0 \
        -f pulse -i "${audio_input_speakers}" \
        -f pulse -i "${audio_input_mic}" \
        -filter_complex "[2]highpass=f=200,lowpass=f=3000[hl]; [1][hl]amix=inputs=2[a]" \
        -map 0:v -map [a] \
        -f flv -ac 2 -ar ${audio_rate} \
        -vcodec libx264 -g ${gop} -keyint_min ${gop_min} -b:v ${cbr} \
        -minrate ${cbr} -maxrate ${cbr} -pix_fmt yuv420p \
        -s ${res_output} -preset "${quality}" -tune film -acodec aac \
        -threads ${threads} -strict normal \
        -bufsize ${cbr} \
        "rtmp://${stream_server}.twitch.tv/app/${stream_key}"
}

# Get stream key securely stored with the password manager "pass"
# and pass the key to the script to start the stream.
stream_to_twitch "$(pass "${1}")"
ヒント: PulseAudio を使用している場合は、pactl list sings short を実行して入力オーディオ ストリームを見つけます。スクリプトの実行中にミキサー (例: pulsemixer または pavucontrol) を使用してオーディオソースを編集することもできます。
ノート: インターネットのアップロード速度によっては、FFmpeg パラメータの変更が必要になる場合があります。内訳リストを参考にしてください。
FFmpeg パラメータの説明
パラメータ 説明
ffmpeg コンバータ
-loglevel "${LOGLEVEL}" ログレベルの出力を設定します
-f x11grab x11grab からの入力を強制します
-s $RES_INPUT 変数 $RES_INPUT で指定された入力ソースから特定の画像サイズを設定します
-r $FPS フレームレートを $FPS に等しい値に設定します
-probesize "${PROBESIZE}" ストリーム情報を取得するために分析するデータのサイズを設定します
-i :0.0 -i は入力を取得、この場合 x11 からスクリーン :0.0 を入力にする。調整可、例えば -i :0.0+500,100 なら画面位置 500/100
-f pulse PulseAudio からの入力を強制します
-i "${AUDIO_INPUT_SPEAKERS}" スピーカーのシンク ID を選択します
-i "${AUDIO_INPUT_MIC}" マイクのシンク ID を選択します
-filter_complex ... マイクにフィルターを適用してノイズを軽減し、オーディオストリームをマージします
-map 0:v マップビデオストリーム
-map [a] オーディオストリームをマップします
-f flv フォーマットを強制的に FLV にします
-ac 2 オーディオチャンネルを 2 に設定します
-ar "${AUDIO_RATE}" オーディオレートを設定します
-vcodec libx264 ビデオコーデックを libx264 に設定します
-b:v "$CBR" ビデオのビットレートを変更することを指定します。ビットレートの値は $CBR によって設定されます
-pix_fmt yuv420p ピクセル形式を Y'UV420p に設定します。それ以外の場合は、デフォルトで Y'UV444 が使用され、Twitch と互換性がありません。
-s $RES_OUTPUT 変数 $RES_OUTPUT で指定された出力用の特定の画像サイズを設定します
-preset "{$QUALITY}" プリセットの圧縮品質と速度を設定します
-acodec aac AAC を使用するようにオーディオコーデックを設定します
-threads 0 開始する CPU スレッドを設定します。0 は CPU コアに基づいてスレッドを自動開始します。