W.I.P.
This commit is contained in:
parent
5a4a7dca98
commit
99e84f4432
1 changed files with 31 additions and 30 deletions
|
@ -1,11 +1,11 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
DURATION=300
|
REPLAY_RESOLUTION=1280x720
|
||||||
RESOLUTION=1280x720
|
LIVE_RESOLUTION=854x480
|
||||||
VBITRATE=2048
|
VBITRATE=2048
|
||||||
ABITRATE=128
|
ABITRATE=128
|
||||||
V4LDEVICE=0
|
V4LDEVICE=0
|
||||||
FPS=12
|
FPS=10
|
||||||
|
|
||||||
if [[ $# -lt 3 ]] ; then
|
if [[ $# -lt 3 ]] ; then
|
||||||
echo "Not enough arguments supplied" >&2
|
echo "Not enough arguments supplied" >&2
|
||||||
|
@ -13,11 +13,11 @@ if [[ $# -lt 3 ]] ; then
|
||||||
echo "first parameter the rtmp port as the second and the streaming key as the third" >&2
|
echo "first parameter the rtmp port as the second and the streaming key as the third" >&2
|
||||||
echo " " >&2
|
echo " " >&2
|
||||||
echo "syntax: " >&2
|
echo "syntax: " >&2
|
||||||
echo " $(basename $0) <peertube-server> <rtmp port> <streaming-key> <duration-in-sec> <resolution> <video-bitrate-kbps> <audio-bitrate-kbps> <v4ldevice> <frames per seconds>" >&2
|
echo " $(basename $0) <peertube-server> <rtmp port> <streaming-key> <replay resolution> <live resolution> <frames per seconds> <video-bitrate-kbps> <audio-bitrate-kbps> <v4ldevice>" >&2
|
||||||
echo " " >&2
|
echo " " >&2
|
||||||
echo "other parameters are optional and will default to the " >&2
|
echo "other parameters are optional and will default to the " >&2
|
||||||
echo "values in the following example :" >&2
|
echo "values in the following example :" >&2
|
||||||
echo " `basename $0` tube.example.com 1935 69ac2d29-eba4-4d5f-a3a6-6047e6768ffb $DURATION $RESOLUTION $VBITRATE $ABITRATE $V4LDEVICE $FPS" >&2
|
echo " `basename $0` tube.example.com 1935 69ac2d29-eba4-4d5f-a3a6-6047e6768ffb $REPLAY_RESOLUTION $LIVE_RESOLUTION $FPS $VBITRATE $ABITRATE $V4LDEVICE" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -25,49 +25,43 @@ URL=rtmp://$1:$2/live/$3
|
||||||
|
|
||||||
if [[ ! -z "$4" ]]
|
if [[ ! -z "$4" ]]
|
||||||
then
|
then
|
||||||
DURATION="$4"
|
REPLAY_RESOLUTION="$4"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -z "$5" ]]
|
if [[ ! -z "$5" ]]
|
||||||
then
|
then
|
||||||
RESOLUTION="$5"
|
LIVE_RESOLUTION="$5"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -z "$6" ]]
|
if [[ ! -z "$6" ]]
|
||||||
then
|
then
|
||||||
VBITRATE="$6"
|
FPS="$6"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -z "$7" ]]
|
||||||
|
then
|
||||||
|
VBITRATE="$7"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BUFFERSIZE=$(echo "2*${VBITRATE}" | bc)
|
BUFFERSIZE=$(echo "2*${VBITRATE}" | bc)
|
||||||
|
|
||||||
if [[ ! -z "$7" ]]
|
|
||||||
then
|
|
||||||
ABITRATE="$7"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -z "$8" ]]
|
if [[ ! -z "$8" ]]
|
||||||
then
|
then
|
||||||
V4LDEVICE="$8"
|
ABITRATE="$8"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! -z "$9" ]]
|
if [[ ! -z "$9" ]]
|
||||||
then
|
then
|
||||||
FPS="$9"
|
V4LDEVICE="$9"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
FILENAME=live-v4l-${1}-cam${V4LDEVICE}-${RESOLUTION}p-${DURATION}s-${VBITRATE}kbps-${ABITRATE}kbps-${2}
|
|
||||||
|
FILENAME=${1}-cam${V4LDEVICE}
|
||||||
echo " "
|
echo " "
|
||||||
echo Will stream to $URL for $DURATION seconds
|
echo Will stream to $URL
|
||||||
echo and save a copy of the data sent to the peertube server to file :
|
echo and save a copy of the data file :
|
||||||
echo $FILENAME
|
echo $FILENAME
|
||||||
echo with :
|
|
||||||
echo "- $RESOLUTION resolution, "
|
|
||||||
echo "- $VBITRATE kbit/s constant video bitrate, "
|
|
||||||
echo "- $BUFFERSIZE kbit video buffer and "
|
|
||||||
echo "- $ABITRATE kbit/s audio bitrate"
|
|
||||||
echo " "
|
|
||||||
$
|
|
||||||
|
|
||||||
#-x264opts nal-hrd=cbr:force-cfr=1:vbv-bufsize=${BUFFERSIZE}:bitrate=${VBITRATE}:vbv-maxrate=${VBITRATE} \
|
#-x264opts nal-hrd=cbr:force-cfr=1:vbv-bufsize=${BUFFERSIZE}:bitrate=${VBITRATE}:vbv-maxrate=${VBITRATE} \
|
||||||
#-shortest \
|
#-shortest \
|
||||||
|
@ -78,21 +72,28 @@ $
|
||||||
#-re \
|
#-re \
|
||||||
#-f lavfi \
|
#-f lavfi \
|
||||||
#-i aevalsrc="(1-min(1\,mod(floor(5*t)\,50)))*0.1*sin(8*PI*(360-2.5/2)*t)+0.1*sin(2*PI*(360-2.5/2)*t)|(1-min(1\,mod(floor(5*t)\,50)))*0.1*sin(8*PI*(360+2.5/2)*t)+0.1*sin(2*PI*(360+2.5/2)*t):sample_rate=48000" \
|
#-i aevalsrc="(1-min(1\,mod(floor(5*t)\,50)))*0.1*sin(8*PI*(360-2.5/2)*t)+0.1*sin(2*PI*(360-2.5/2)*t)|(1-min(1\,mod(floor(5*t)\,50)))*0.1*sin(8*PI*(360+2.5/2)*t)+0.1*sin(2*PI*(360+2.5/2)*t):sample_rate=48000" \
|
||||||
|
#-t ${DURATION} \
|
||||||
|
|
||||||
|
#-f lavfi -i aevalsrc="(1-min(1\,mod(floor(5*t)\,50)))*0.1*sin(8*PI*(360-2.5/2)*t)+0.1*sin(2*PI*(360-2.5/2)*t)|(1-min(1\,mod(floor(5*t)\,50)))*0.1*sin(8*PI*(360+2.5/2)*t)+0.1*sin(2*PI*(360+2.5/2)*t):sample_rate=48000" \
|
||||||
|
#-f alsa -ac 2 -i hw:CARD=CAMERA,DEV=${V4LDEVICE} \
|
||||||
|
|
||||||
|
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
-loglevel level \
|
-loglevel level \
|
||||||
-y \
|
-y \
|
||||||
-f v4l2 -framerate ${FPS} -video_size ${RESOLUTION} -input_format mjpeg -i /dev/video${V4LDEVICE} \
|
-f v4l2 -framerate ${FPS} -video_size ${REPLAY_RESOLUTION} -input_format mjpeg -i /dev/video${V4LDEVICE} \
|
||||||
-f alsa -ac 2 -i hw:CARD=CAMERA,DEV=${V4LDEVICE} \
|
-f lavfi -i aevalsrc="(1-min(1\,mod(floor(5*t)\,50)))*0.1*sin(8*PI*(360-2.5/2)*t)+0.1*sin(2*PI*(360-2.5/2)*t)|(1-min(1\,mod(floor(5*t)\,50)))*0.1*sin(8*PI*(360+2.5/2)*t)+0.1*sin(2*PI*(360+2.5/2)*t):sample_rate=48000" \
|
||||||
-channel_layout stereo \
|
-channel_layout stereo \
|
||||||
-ar 48000 \
|
-ar 48000 \
|
||||||
-pixel_format yuv420p \
|
-pixel_format yuv420p \
|
||||||
-filter_complex "[1:a]volume=-10dB;[0:v]scale='size=${RESOLUTION}',drawtext='font=DejaVuSansMono:text=%{pts}: fontcolor=white: fontsize=h/12: box=1: boxcolor=black@0.43: boxborderw=5: x=mod(floor(t/10+1)\,2)*mod(t*(w-text_w)/10\,w-text_w)+mod(floor(t/10)\,2)*(w-text_w-mod(t*(w-text_w)/10\,w-text_w)): y=text_h/2', drawtext='font=DejaVuSansMono:text=%{localtime}: fontcolor=white: fontsize=h/20: box=1: boxcolor=black@0.43: boxborderw=5: x=text_h: y=h-3*text_h/2'" \
|
-filter_complex "[1:a]volume=-10dB;[0:v]drawtext='font=DejaVuSansMono:text=%{pts}: fontcolor=white: fontsize=h/12: box=1: boxcolor=black@0.43: boxborderw=5: x=mod(floor(t/10+1)\,2)*mod(t*(w-text_w)/10\,w-text_w)+mod(floor(t/10)\,2)*(w-text_w-mod(t*(w-text_w)/10\,w-text_w)): y=text_h/2', drawtext='font=DejaVuSansMono:text=%{localtime}: fontcolor=white: fontsize=h/20: box=1: boxcolor=black@0.43: boxborderw=5: x=text_h: y=h-3*text_h/2', split=2[out1][out2]" \
|
||||||
-codec:v libx264 \
|
-codec:v libx264 \
|
||||||
-preset fast \
|
-preset fast \
|
||||||
-x264opts nal-hrd=cbr:force-cfr=1:vbv-bufsize=${BUFFERSIZE}:bitrate=${VBITRATE}:vbv-maxrate=${VBITRATE} \
|
-x264opts nal-hrd=cbr:force-cfr=1:vbv-bufsize=${BUFFERSIZE}:bitrate=${VBITRATE}:vbv-maxrate=${VBITRATE} \
|
||||||
-c:a aac -b:a ${ABITRATE}k \
|
-c:a aac -b:a ${ABITRATE}k \
|
||||||
-g 1 -segment_format_options movflags=+frag_keyframe+empty_moov+default_base_moof -segment_time 5 -f segment \
|
-g 1 -segment_format_options movflags=+frag_keyframe+empty_moov+default_base_moof -segment_time 5 -f segment \
|
||||||
-t ${DURATION} \
|
|
||||||
-flags +global_header \
|
-flags +global_header \
|
||||||
-f tee -map 0:v -map 1:a "[f=matroska]${FILENAME}.mkv|[f=flv]${URL}"
|
-map '[out1]' -s ${LIVE_RESOLUTION} -map 1:a -f flv ${URL} \
|
||||||
|
-map '[out2]' -s ${REPLAY_RESOLUTION} -map 1:a -f matroska \
|
||||||
|
-f segment -segment_time 10:00 -reset_timestamps 1 \
|
||||||
|
-strftime 1 "${FILENAME}_%Y-%m-%d_%H-%M-%S.mkv"
|
||||||
|
|
Loading…
Reference in a new issue