「Twitch.tv を使ってストリーミング」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎GUI の方法: 情報を更新)
(→‎Ffmpeg の方法: 情報を更新)
35行目: 35行目:
 
:: {{Note|'minrate', 'maxrate', 'bufsize' の値は同じにしてください。}}
 
:: {{Note|'minrate', 'maxrate', 'bufsize' の値は同じにしてください。}}
   
==Ffmpeg の方法==
+
== CLI の方法 ==
以下の方法は [[FFmpeg]] パッケージを利用します:
 
===.bashrc スクリプトを使う方法===
 
FFmpeg を使って twitch にストリーミングする方法の一つとしてユーザーの {{ic|~/.bashrc}} ファイルにシンプルなスクリプトを記述する方法があります。このスクリプトはデスクトップと OpenGL エレメント両方のストリーミングをサポートしています。
 
{{Note|インターネットのアップロード速度によっては、FFmpeg のパラメータを修正する必要があります。下のパラメータのリストを参照してください。}}
 
   
  +
* [[#FFmpeg|FFmpeg]] ({{pkg|ffmpeg}})
スクリプトを使う時はターミナルに次を入力します:
 
  +
** PyLivestream ({{AUR|pylivestream-git}})
$ streaming streamkeyhere
 
  +
* [[GStreamer]] ({{pkg|gstreamer}})
スクリプトが実行している間、''pavucontrol'' を使って音声ソースを編集します。
 
  +
** [https://github.com/joanrieu/gst-live gst-live]
{{ic|.bashrc}} スクリプトは以下のようになります:
 
   
  +
=== FFmpeg ===
streaming() {
 
  +
INRES="1920x1080" # input resolution
 
  +
次のソリューションでは、Twitch.tv へのストリーミングに [[FFmpeg]] を利用します。
OUTRES="1920x1080" # output resolution
 
  +
FPS="15" # target FPS
 
  +
=== .bashrc スクリプトを使う方法 ===
GOP="30" # i-frame interval, should be double of FPS,
 
  +
GOPMIN="15" # min i-frame interval, should be equal to fps,
 
  +
FFmpeg を使用して Twitch.tv にストリーミングするために、デスクトップ要素と OpenGL 要素の両方のストリーミングをサポートします。このスクリプトは、シェル内で {{ic|stream-to-twitch path/to/stream_key}} を実行することで呼び出すことができます。キーは [[pass]] で安全に保存されています。スクリプトは次のとおりです。
THREADS="2" # max 6
 
  +
CBR="1000k" # constant bitrate (should be between 1000k - 3000k)
 
  +
{{hc|/usr/local/sbin/stream-to-twitch|<nowiki>
QUALITY="ultrafast" # one of the many FFMPEG preset
 
  +
#!/usr/bin/env sh
AUDIO_RATE="44100"
 
  +
#
STREAM_KEY="$1" # use the terminal command Streaming streamkeyhere to stream your video to twitch or justin
 
  +
# Stream screen and audio (speakers and microphone) to Twitch.tv using FFmpeg.
SERVER="live-fra" # twitch server in frankfurt, see http://bashtech.net/twitch/ingest.php for list
 
  +
#
 
  +
# Usage: stream-to-twitch path/to/key
ffmpeg -f x11grab -s "$INRES" -r "$FPS" -i :0.0 -f alsa -i pulse -f flv -ac 2 -ar $AUDIO_RATE \
 
  +
-vcodec libx264 -g $GOP -keyint_min $GOPMIN -b:v $CBR -minrate $CBR -maxrate $CBR -pix_fmt yuv420p\
 
  +
set -euo pipefail
-s $OUTRES -preset $QUALITY -tune film -acodec libmp3lame -threads $THREADS -strict normal \
 
  +
-bufsize $CBR "rtmp://$SERVER.twitch.tv/app/$STREAM_KEY"
 
  +
#######################################
}
 
  +
# 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}")"
  +
</nowiki>}}
  +
  +
{{Tip|PulseAudio を使用している場合は、{{ic|pactl list sings short}} を実行して入力オーディオ ストリームを見つけます。スクリプトの実行中にミキサー (例: {{pkg|pulsemixer}} または {{pkg|pavucontrol}}) を使用してオーディオソースを編集することもできます。}}
  +
  +
{{Note|インターネットのアップロード速度によっては、FFmpeg パラメータの変更が必要になる場合があります。内訳リストを参考にしてください。}}
   
 
{| class="wikitable"
 
{| class="wikitable"
71行目: 116行目:
 
| ffmpeg || コンバータ
 
| ffmpeg || コンバータ
 
|-
 
|-
| -f x11grab || -f は x11grab から力を強制
+
| {{ic|-loglevel "${LOGLEVEL}"}} || ログレベル力を設定します
  +
|-
  +
| {{ic|-f x11grab}} || x11grab からの入力を強制します
  +
|-
  +
| {{ic|-s $RES_INPUT}} || 変数 $RES_INPUT で指定された入力ソースから特定の画像サイズを設定します
  +
|-
  +
| {{ic|-r $FPS}} || フレームレートを $FPS に等しい値に設定します
  +
|-
  +
| {{ic|-probesize "${PROBESIZE}"}} || ストリーム情報を取得するために分析するデータのサイズを設定します
 
|-
 
|-
  +
| {{ic|-i :0.0}} || -i は入力を取得、この場合 x11 からスクリーン :0.0 を入力にする。調整可、例えば -i :0.0+500,100 なら画面位置 500/100
| -s $INRES || -s は $INRES 変数を使って特定の画像サイズを設定
 
 
|-
 
|-
  +
| {{ic|-f pulse}} || PulseAudio からの入力を強制します
| -r $FPS || -r は $FPS と同じ値にフレームレートを設定
 
 
|-
 
|-
  +
| {{ic|-i "${AUDIO_INPUT_SPEAKERS}"}} || スピーカーのシンク ID を選択します
| -i :0.0 || -i は入力を取得、この場合 x11 からスクリーン :0.0 を入力にする。調整可、例えば -i :0.0+500,100 なら画面位置 500/100
 
 
|-
 
|-
  +
| {{ic|-i "${AUDIO_INPUT_MIC}"}} || マイクのシンク ID を選択します
| -b:v $CBR || -b:v は動画のビットレートが可変になるように指定します。ビットレートの値は $CBR で設定されます
 
 
|-
 
|-
  +
| {{ic|-filter_complex ...}} || マイクにフィルターを適用してノイズを軽減し、オーディオストリームをマージします
| -ab 96k || -ab は音声ビットレートを 96k に設定。'''-b:a''' という表記も可能
 
 
|-
 
|-
  +
| {{ic|-map 0:v}} || マップビデオストリーム
| -f alsa || alsa からの入力を強制
 
 
|-
 
|-
  +
| {{ic|-map [a]}} || オーディオストリームをマップします
| -ac 2 || 音声チャンネルを 2 に設定
 
 
|-
 
|-
  +
| {{ic|-f flv}} || フォーマットを強制的に FLV にします
| -i pulse || pulse からの入力を取得
 
 
|-
 
|-
| -vcodec libx264 || 動画コーデックlibx264 に設定
+
| {{ic|-ac 2}} || ーディオチャンネル2 に設定します
 
|-
 
|-
  +
| {{ic|-ar "${AUDIO_RATE}"}} || オーディオレートを設定します
| -crf 23 || ffmpeg の constant rate factor を 23 に設定
 
 
|-
 
|-
  +
| {{ic|-vcodec libx264}} || ビデオコーデックを libx264 に設定します
| -preset "$QUAL" || プリセットの圧縮品質と速度を設定
 
 
|-
 
|-
  +
| {{ic|-b:v "$CBR"}} || ビデオのビットレートを変更することを指定します。ビットレートの値は $CBR によって設定されます
| -s "1280x720" || 画像のサイズを 720p に設定
 
 
|-
 
|-
  +
| {{ic|-pix_fmt yuv420p}} || ピクセル形式を Y'UV420p に設定します。それ以外の場合は、デフォルトで Y'UV444 が使用され、Twitch と互換性がありません。
| -acodec libmp3lame || 音声コーデックを libmp3lame を使うように設定
 
 
|-
 
|-
  +
| {{ic|-s $RES_OUTPUT}} || 変数 $RES_OUTPUT で指定された出力用の特定の画像サイズを設定します
| -ar 44100 || 音声レートを 44100 hz に設定
 
 
|-
 
|-
  +
| {{ic|-preset "{$QUALITY}"}} || プリセットの圧縮品質と速度を設定します
| -threads 0 || 作成する cpu スレッドを設定、0 は cpu のコア数に基づいて自動的にスレッドを作成
 
 
|-
 
|-
  +
| {{ic|-acodec aac}} || AAC を使用するようにオーディオコーデックを設定します
| -pix_fmt yuv420p || ピクセルフォーマットを Y'UV420p に設定。デフォルトで使用される Y'UV444 は twitch が対応していない
 
 
|-
 
|-
  +
| {{ic|-threads 0}} || 開始する CPU スレッドを設定します。0 は CPU コアに基づいてスレッドを自動開始します。
| -f flv "$URL" || フォーマットを flv に強制して、twitch の RTMP url に出力
 
 
|}
 
|}

2023年10月16日 (月) 20:31時点における版

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 コアに基づいてスレッドを自動開始します。