「Twitch.tv を使ってストリーミング」の版間の差分
表示
削除された内容 追加された内容
Created page with "Category:Streaming en:Streaming using twitch.tv Twitch.tv は RTMP ベースの人気のストリーミング..." |
他言語へのリンクを追加 |
||
| (2人の利用者による、間の8版が非表示) | |||
| 1行目: | 1行目: | ||
[[Category:ストリーミング]] |
[[Category:ストリーミング]] |
||
[[Category:マルチメディア]] |
|||
[[en:Streaming using twitch.tv]] |
|||
[[en:Streaming to twitch.tv]] |
|||
Twitch.tv は [[Wikipedia:ja:Real Time Messaging Protocol|RTMP]] ベースの人気のストリーミングサービスの一つです。[[Steam|Steam]] には Linux クライアントがあるため、ゲームや Linux デスクトップをストリーミングする方法を探している人がいるかもしれません。有名な Linux ブロードキャスティングプログラムはまだ存在しません、今のところは CLI ベースのものがよく使われます。このページではそのような方法のリストとして情報を提供しています。 |
|||
[[zh-hans:Streaming_to_twitch.tv]] |
|||
Twitch.tv は [[Wikipedia:ja:Real Time Messaging Protocol|RTMP]] ベースの人気のストリーミングサービスの一つです。[[Steam]] には Linux クライアントがあるため、ゲームや Linux デスクトップをストリーミングする方法を探している人がいるかもしれません。このページではそのような方法のリストとして情報を提供しています。 |
|||
== Twitch ストリーミングガイドライン == |
|||
==Twitch ストリーミングガイドライン== |
|||
[http://help.twitch.tv/customer/portal/articles/1253460-broadcast-requirements Twitch.tv サポート] より: |
[http://help.twitch.tv/customer/portal/articles/1253460-broadcast-requirements Twitch.tv サポート] より: |
||
| 12行目: | 15行目: | ||
'''オーディオ要件''' |
'''オーディオ要件''' |
||
* コーデック: AAC-LC |
* コーデック: AAC-LC ステレオまたはモノ音声 |
||
* 最大ビットレート: 160 kbps |
* 最大ビットレート: 160 kbps |
||
* サンプリング周波数: |
* サンプリング周波数: 任意 {{Note|MP3 コーデックのサポートは廃止されました}} |
||
'''他の要件''' |
'''他の要件''' |
||
Twitch のページで記載されていないものとして [[Wikipedia:ja:YUV|Y'UV420p ピクセルフォーマット]]の要件があります、Y'UV444 はあまりサポートされていません。 |
Twitch のページで記載されていないものとして [[Wikipedia:ja:YUV|Y'UV420p ピクセルフォーマット]] の要件があります、Y'UV444 はあまりサポートされていません。 |
||
==GUI の方法== |
==GUI の方法== |
||
* Open Broadcaster Software ({{Pkg|obs-studio}}) は人気のあるストリーミングプログラムです。[[公式リポジトリ]]からインストールできます。Linux 版のアルファビルドも利用することができます ({{AUR|obs-studio-git}}) |
|||
{{AUR|castawesome}} は ffmpeg ストリーミングの [[GTK+|Gtk3]] フロントエンドで Twitch.tv のサポートが付いています。 |
|||
* {{AUR|castawesome}} は ffmpeg ストリーミングの [[GTK+|Gtk3]] フロントエンドで Twitch.tv のサポートが付いています。 |
|||
==Ffmpeg の方法== |
|||
以下の方法は [[FFmpeg|FFmpeg]] パッケージを利用します: |
|||
===.bashrc スクリプトを使う方法=== |
|||
FFmpeg を使って twitch にストリーミングする方法の一つとしてユーザーの {{ic|~/.bashrc}} ファイルにシンプルなスクリプトを記述する方法があります。このスクリプトはデスクトップと OpenGL エレメント両方のストリーミングをサポートしています。 |
|||
{{Note|インターネットのアップロード速度によっては、FFmpeg のパラメータを修正する必要があります。下のパラメータのリストを参照してください。}} |
|||
* SimpleScreenRecorder ({{Pkg|simplescreenrecorder}}) を使って twitch にストリーミングすることもできます。 |
|||
スクリプトを使う時はターミナルに次を入力します: |
|||
** コンテナは FLV に設定してください。 |
|||
$ streaming streamkeyhere |
|||
** RTMP の URL を 'save as' フィールドに記入してください。 |
|||
スクリプトが実行している間、''pavucontrol'' を使って音声ソースを編集します。 |
|||
** 'separeate file per segment' のチェックが外れていることを確認してください。 |
|||
{{ic|.bashrc}} スクリプトは以下のようになります: |
|||
** 動画のコーデックは libx264 に設定 (H.264 ではありません)。 |
|||
** ビットレートは 2000 kbps などに設定。 |
|||
** カスタムオプションフィールドに {{ic|1=preset=fast,minrate=2000,maxrate=2000,bufsize=2000,keyint=60}} と入力。 |
|||
:: {{Note|'minrate', 'maxrate', 'bufsize' の値は同じにしてください。}} |
|||
== CLI の方法 == |
|||
streaming() { |
|||
INRES="1920x1080" # input resolution |
|||
* [[#FFmpeg|FFmpeg]] ({{pkg|ffmpeg}}) |
|||
OUTRES="1920x1080" # output resolution |
|||
** PyLivestream ({{AUR|pylivestream-git}}) |
|||
FPS="15" # target FPS |
|||
* [[GStreamer]] ({{pkg|gstreamer}}) |
|||
GOP="30" # i-frame interval, should be double of FPS, |
|||
** [https://github.com/joanrieu/gst-live gst-live] |
|||
GOPMIN="15" # min i-frame interval, should be equal to fps, |
|||
THREADS="2" # max 6 |
|||
=== FFmpeg === |
|||
CBR="1000k" # constant bitrate (should be between 1000k - 3000k) |
|||
QUALITY="ultrafast" # one of the many FFMPEG preset |
|||
次のソリューションでは、Twitch.tv へのストリーミングに [[FFmpeg]] を利用します。 |
|||
AUDIO_RATE="44100" |
|||
STREAM_KEY="$1" # use the terminal command Streaming streamkeyhere to stream your video to twitch or justin |
|||
=== .bashrc スクリプトを使う方法 === |
|||
SERVER="live-fra" # twitch server in frankfurt, see http://bashtech.net/twitch/ingest.php for list |
|||
FFmpeg を使用して Twitch.tv にストリーミングするために、デスクトップ要素と OpenGL 要素の両方のストリーミングをサポートします。このスクリプトは、シェル内で {{ic|stream-to-twitch path/to/stream_key}} を実行することで呼び出すことができます。キーは [[pass]] で安全に保存されています。スクリプトは次のとおりです。 |
|||
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 $CBR -minrate $CBR -maxrate $CBR -pix_fmt yuv420p\ |
|||
{{hc|/usr/local/sbin/stream-to-twitch|<nowiki> |
|||
-s $OUTRES -preset $QUALITY -tune film -acodec libmp3lame -threads $THREADS -strict normal \ |
|||
#!/usr/bin/env sh |
|||
-bufsize $CBR "rtmp://$SERVER.twitch.tv/app/$STREAM_KEY" |
|||
# |
|||
} |
|||
# 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}")" |
|||
</nowiki>}} |
|||
{{Tip|PulseAudio を使用している場合は、{{ic|pactl list sings short}} を実行して入力オーディオ ストリームを見つけます。スクリプトの実行中にミキサー (例: {{pkg|pulsemixer}} または {{pkg|pavucontrol}}) を使用してオーディオソースを編集することもできます。}} |
|||
{{Note|インターネットのアップロード速度によっては、FFmpeg パラメータの変更が必要になる場合があります。内訳リストを参考にしてください。}} |
|||
{| class="wikitable" |
{| class="wikitable" |
||
| 59行目: | 118行目: | ||
| ffmpeg || コンバータ |
| ffmpeg || コンバータ |
||
|- |
|- |
||
| - |
| {{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 |
|||
|- |
|- |
||
| {{ic|-f pulse}} || PulseAudio からの入力を強制します |
|||
| -s "$INRES" || -s は $INRES 変数を使って特定の画像サイズを設定 |
|||
|- |
|- |
||
| {{ic|-i "${AUDIO_INPUT_SPEAKERS}"}} || スピーカーのシンク ID を選択します |
|||
| -r "$FPS" || -r は $FPS と同じ値にフレームレートを設定 |
|||
|- |
|- |
||
| {{ic|-i "${AUDIO_INPUT_MIC}"}} || マイクのシンク ID を選択します |
|||
| -i :0.0 || -i は入力を取得、この場合 x11 からスクリーン :0.0 を入力にする。調整可、例えば -i :0.0+500,100 なら画面位置 500/100 |
|||
|- |
|- |
||
| {{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 からの入力を取得 |
|||
|- |
|- |
||
| - |
| {{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:34時点における最新版
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 | コンバータ |
-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 コアに基づいてスレッドを自動開始します。 |