「Twitch.tv を使ってストリーミング」の版間の差分
ナビゲーションに移動
検索に移動
(同期) |
(他言語へのリンクを追加) |
||
(2人の利用者による、間の6版が非表示) | |||
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]] には 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 のサポートが付いています。 |
||
− | * Open Broadcaster Software ({{Pkg|obs-studio}}) は Windows で人気のあるソフトウェアです。パッケージは公式ビルドではないので注意してください。Linux 版のアルファビルドも利用することができます ({{AUR|obs-studio-git}})。 |
||
* SimpleScreenRecorder ({{Pkg|simplescreenrecorder}}) を使って twitch にストリーミングすることもできます。 |
* SimpleScreenRecorder ({{Pkg|simplescreenrecorder}}) を使って twitch にストリーミングすることもできます。 |
||
32行目: | 35行目: | ||
** ビットレートは 2000 kbps などに設定。 |
** ビットレートは 2000 kbps などに設定。 |
||
** カスタムオプションフィールドに {{ic|1=preset=fast,minrate=2000,maxrate=2000,bufsize=2000,keyint=60}} と入力。 |
** カスタムオプションフィールドに {{ic|1=preset=fast,minrate=2000,maxrate=2000,bufsize=2000,keyint=60}} と入力。 |
||
− | + | :: {{Note|'minrate', 'maxrate', 'bufsize' の値は同じにしてください。}} |
|
− | == |
+ | == 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" |
||
70行目: | 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 |
||
− | | -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 からの入力を取得 |
||
|- |
|- |
||
− | | - |
+ | | {{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
- サンプリング周波数: 任意
他の要件
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
と入力。
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}")"
パラメータ | 説明 |
---|---|
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 コアに基づいてスレッドを自動開始します。 |