#!/bin/bash ################################################################################ # Author: Fred (support@qo-op.com) # Version: 0.1 # License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) ################################################################################ MY_PATH="`dirname \"$0\"`" # relative MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized ME="${0##*/}" PLAYER="$1" [[ ${PLAYER} == "" ]] && PLAYER=$(cat ~/.zen/game/players/.current/.player 2>/dev/null) [[ ${PLAYER} == "" ]] && espeak "ERROR PLAYER - EXIT" && exit 1 PSEUDO=$(cat ~/.zen/game/players/${PLAYER}/.pseudo 2>/dev/null) [[ $G1PUB == "" ]] && G1PUB=$(cat ~/.zen/game/players/${PLAYER}/.g1pub 2>/dev/null) [[ $G1PUB == "" ]] && espeak "ERROR G1PUB - EXIT" && exit 1 ASTRONAUTENS=$(ipfs key list -l | grep -w ${PLAYER} | cut -d ' ' -f1) [[ ! $ASTRONAUTENS ]] && echo "${PLAYER} CLEF IPNS INTROUVABLE - EXIT -" && exit 1 YOU=$(ipfs swarm peers >/dev/null 2>&1 && echo "$USER" || ps auxf --sort=+utime | grep -w ipfs | grep -v -E 'color=auto|grep' | tail -n 1 | cut -d " " -f 1); LIBRA=$(head -n 2 ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | tail -n 1 | cut -d ' ' -f 2) MOATS=$(date -u +"%Y%m%d%H%M%S%4N") IPFSNODEID=$(cat ~/.ipfs/config | jq -r .Identity.PeerID) myIP=$(hostname -I | awk '{print $1}' | head -n 1) isLAN=$(echo $myIP | grep -E "/(^127\.)|(^192\.168\.)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^::1$)|(^[fF][cCdD])/") [[ ! $myIP || $isLAN ]] && myIP="127.0.1.1" mkdir -p ~/.zen/game/players/${PLAYER}/vlog screencapture(){ vlc \ -i screen://\ --sout "#transcode{vcodec=h264,vb=800,fps=5,scale=1,acodec=none}:duplicate{dst=std{access=file,mux=mp4,dst='${HOME}/Screencapture $(date +%Y-%m-%d) at $(date +%H.%M.%S).mp4'}}" deskid="$!" } if [[ -f ~/.zen/soundrecord.config ]]; then source ~/.zen/soundrecord.config else RECDEVICE=$(pactl list short sources | grep input | cut -f 2) fi mkdir -p ~/.zen/tmp/ espeak "Hello" espeak "Getting player latest TW. please wait." ## GETTING LAST TW via IPFS or HTTP GW [[ $YOU ]] && echo "http://$myIP:8080/ipns/${ASTRONAUTENS} ($YOU)" && ipfs --timeout 6s cat /ipns/${ASTRONAUTENS} > ~/.zen/tmp/vlc_webcam.html [[ ! -s ~/.zen/tmp/vlc_webcam.html ]] && echo "$LIBRA/ipns/${ASTRONAUTENS}" && curl -m 6 -so ~/.zen/tmp/vlc_webcam.html "$LIBRA/ipns/${ASTRONAUTENS}" [[ ! -s ~/.zen/tmp/vlc_webcam.html ]] && espeak "WARNING. impossible to find your TW online" [[ ! -s ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html ]] && espeak "FATAL ERROR. No local copy found !" && exit 1 [[ -s ~/.zen/tmp/vlc_webcam.html ]] && cp -f ~/.zen/tmp/vlc_webcam.html ~/.zen/game/players/${PLAYER}/ipfs/moa/index.html && espeak "OK DONE" espeak "Start Video recording. Press ENTER to stop !" # Find "input-slave" :: pactl list short sources # RECTIME=12 # ${MY_PATH}/displaytimer.sh 12 & # timeout $RECTIME cvlc v4l2:///dev/video0:width=640:height=480 --input-slave=pulse://alsa_input.usb-HD_Web_Camera_HD_Web_Camera_Ucamera001-02.analog-mono --sout "#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:standard{access=file,mux=mp4,dst=\"$HOME/.zen/tmp/MyVid.mp4\"}" cvlc v4l2:///dev/video0:width=640:height=480 --input-slave=pulse://$RECDEVICE --sout "#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:standard{access=file,mux=mp4,dst=\"$HOME/.zen/tmp/MyVid.mp4\"}" & processid="$!" echo "Press ENTER to stop video recording" [[ $(echo $DISPLAY | cut -d ':' -f 1) == "" ]] && zenity --warning --width 360 --text "(◕‿‿◕) STOP... " || read kill -15 $processid # cvlc v4l2:///dev/video0:width=640:height=480 --input-slave=pulse://alsa_input.usb-HD_Web_Camera_HD_Web_Camera_Ucamera001-02.analog-mono --sout '#transcode{acodec=mpga,ab=128,channels=2,samplerate=44100,threads=4,audio-sync=1}:standard{access=file,mux=mp4,dst='~/.zen/tmp/MyVid.mp4'}' --run-time=$RECTIME --stop-time=$RECTIME cvlc://quit ## RECOMMANCER ? espeak "video transcoding" #-acodec aac # Ecran vert : ffmpeg -i input.mp4 -i greenscreen.mp4 -filter_complex '[1:v]colorkey=color=00FF00:similarity=0.85:blend=0.0[ckout];[0:v][ckout]overlay[out]' -map '[out]' output.mp4 rm -f ~/.zen/tmp/output.mp4 ffmpeg -loglevel quiet -i ~/.zen/tmp/MyVid.mp4 -vcodec libx264 -loglevel quiet ~/.zen/tmp/output.mp4 ## Create short gif rm -f ~/.zen/tmp/screen.gif ffmpeg -loglevel quiet -ss 1.0 -t 1.6 -loglevel quiet -i ~/.zen/tmp/output.mp4 ~/.zen/tmp/screen.gif ANIMH=$(ipfs add -q ~/.zen/tmp/screen.gif) # Conversion HLS ffmpeg -loglevel quiet -i ~/.zen/tmp/output.mp4 -codec: copy -start_number 0 -hls_time 10 -hls_list_size 0 -f hls ~/.zen/tmp/output.m3u8 ## ADDING TO IPFS [[ ! -s ~/.zen/tmp/output.mp4 ]] && espeak "Sorry no video file found" && exit 1 IPFSID=$(ipfs add -wHq ~/.zen/tmp/output.mp4 | tail -n 1) echo "NEW VIDEO FILE /ipfs/$IPFSID/output.mp4" echo "FOUND : ~/.zen/tmp/output.mp4" FILE_BSIZE=$(du -b "$HOME/.zen/tmp/output.mp4" | awk '{print $1}') FILE_SIZE=$(echo "${FILE_BSIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }') espeak "FILE SIZE = $FILE_SIZE" espeak "OK" mkdir -p ~/.zen/game/players/${PLAYER}/vlog ## Creating new video chain index.html OLDID=$(cat ~/.zen/game/players/${PLAYER}/.vlog.index 2>/dev/null) if [[ $OLDID ]]; then sed s/_OLDID_/$OLDID/g ${MY_PATH}/../templates/video_chain.html > ~/.zen/game/players/${PLAYER}/vlog/${MOATS}.index.html sed -i s/_IPFSID_/$IPFSID/g ~/.zen/game/players/${PLAYER}/vlog/${MOATS}.index.html else sed s/_IPFSID_/$IPFSID/g ${MY_PATH}/../templates/video_first.html > ~/.zen/game/players/${PLAYER}/vlog/${MOATS}.index.html fi sed -i "s~_DATE_~$(date -u "+%Y-%m-%d#%H:%M:%S")~g" ~/.zen/game/players/${PLAYER}/vlog/${MOATS}.index.html sed -i "s~_PLAYER_~${PLAYER}~g" ~/.zen/game/players/${PLAYER}/vlog/${MOATS}.index.html sed -i "s~_ANIMH_~${ANIMH}~g" ~/.zen/game/players/${PLAYER}/vlog/${MOATS}.index.html mv ~/.zen/game/players/${PLAYER}/vlog/${MOATS}.index.html ~/.zen/game/players/${PLAYER}/vlog/index.html IPFSROOT=$(ipfs add -rHq ~/.zen/game/players/${PLAYER}/vlog | tail -n 1) echo $IPFSROOT > ~/.zen/game/players/${PLAYER}/.vlog.index echo "NEW VIDEO http://$myIP:8080/ipfs/$IPFSROOT" ########################### ## AJOUT VIDEO ASTROPORT TW ########################### MEDIAID=$(date -u +"%Y%m%d%H%M%S%4N") mkdir -p ~/astroport/video/vlog/ MEDIAKEY="VLOG_${PLAYER}_${MEDIAID}" cp ~/.zen/tmp/output.mp4 ~/astroport/video/vlog/${PLAYER}_$MEDIAID.mp4 REAL=$(file --mime-type -b "$HOME/astroport/video/vlog/${PLAYER}_$MEDIAID.mp4") ## TW not displaying direct ipfs video link (only image, pdf, ...) so insert