-
-
Save metalolf/0b5f3c874308ab2e0df953e892e17fd3 to your computer and use it in GitHub Desktop.
Stream Raspberry Pi Camera to Twitch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# ================================================================= | |
# Stream configuration file for Raspberry Pi Camera | |
# | |
# @author Russell Feldhausen (russfeldh@gmail.com) | |
# @version 2019-06-05 | |
# @forked 2023-01-15 by fwnklr | |
# | |
# This set of commands should allow you to stream video from your | |
# Raspberry Pi Camera to Twitch and Youtube (and possibly other | |
# RTMP endpoints) with decent quality and performance. | |
# | |
# You may need to install raspivid and/or ffmpeg to use this script. | |
# ================================================================= | |
# Set width and height of output video | |
WIDTH=1920 | |
HEIGHT=1080 | |
# Set output framerate | |
FRAMERATE=30 | |
#Set Rotation | |
ROTATION=0 | |
# Set keyframe spacing (must be double the framerate) | |
KEYFRAME=60 | |
# Set bitrate (Twitch recommends 3500000) | |
BITRATE=3500000 | |
# Camera Settings (includes commands) | |
# If you use a hdmi-csi bridge these setting should be handled with care | |
SATURATION=25 #sa | |
SHARPNESS= #sh | |
CONTRAST= #co | |
BRIGHTNESS= #br | |
AWB= #awb | |
ISO= #iso | |
SHUTTERSPEED= #ss | |
EXPOSURE= #ex | |
EV=0 #ev | |
ANTIFLICKER= #fli | |
IMAGEEFFECT= #ifx | |
# Set video offset | |
OFFSET=0.5 | |
# Set Audio input (check using "arecord -l") | |
INPUT=plughw:2,0 | |
# Set stream URL | |
URL=rtmp://ber.contribute.live-video.net/app | |
# Set stream key | |
KEY= | |
# Command | |
raspivid -o - -t 0 -w $WIDTH -h $HEIGHT -fps $FRAMERATE -b $BITRATE -rot $ROTATION -g $KEYFRAME -sa $SATURATION -awb $AWB -ev $EV -f | /home/pi/ffmpeg/ffmpeg -use_wallclock_as_timestamps 1 -thread_queue_size 10240 -f h264 -r 30 -i - -itsoffset $OFFSET -f alsa -thread_queue_size 10240 -ac 2 -i $INPUT -vcodec copy -acodec aac -ac 2 -ar 44100 -ab 192k -f flv "${URL}/${KEY}" | |
# ================================================================= | |
# Full Documentation of Command Options | |
# | |
# +++ raspivid +++ | |
# -n = no preview window | |
# -t = time to capture (0 to disable, which allows streaming) | |
# -w = video width | |
# -h = video height | |
# -fps = output framerate (max 30 for 1080p, 60 for 720p) | |
# -b = bitrate | |
# -g = keyframe rate (refresh period) | |
# -o - = output to stdout (allows piping to ffmpeg) | |
# | |
# +++ ffmpeg +++ | |
# -f lavfi = use lavfi filter (see note below) | |
# -i anullsrc = grab blank input (see note below) | |
# -c:a aac = set audio codec to aac | |
# -r = output framerate (should match raspivid framerate) | |
# -i - = read input from stdin (piped from ffmpeg) | |
# -g = keyframe rate (refresh period) | |
# -strict experimental = allow nonstandard things | |
# -threads 4 = set number of encoding threads to 4 (# of cores) | |
# -vcodec copy = use video as-is (do not re-encode video) | |
# -map 0:a = use the audio from input 0 (see note below) | |
# -map 1:v = use the video from input 1 (raspivid) | |
# -b:v = bitrate | |
# -preset ultrafast = use the ultrafast encoding preset | |
# -f flv = set output format to flv for streaming | |
# "${URL}/{KEY}" = specify RTMP URL as output for stream | |
# | |
# ** NOTE ** | |
# According to some information online, YouTube will reject a live | |
# stream without an audio channel. | |
# ================================================================= |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment