diff --git a/upload-script.sh b/upload-script.sh index 23e44d1..9718a0a 100644 --- a/upload-script.sh +++ b/upload-script.sh @@ -1,49 +1,238 @@ -#!/bin/bash +#!/bin/#!/usr/bin/env bash +# This bash script transcode automagical recorded files with OBS in record/ into smaller mp4 files with fade in and out in upload-files. +# The files would be renamed into same file names with counting numbers. +# In additional, it will create thumbnails which will be uploaded with youtube-upload. +# after the script is done, it will create a upload-$ folder with the videos, thumbnails, description and a upload script file. -# set your options here: -# How many Videos do you want to upload in a row -Episoden='1' +# Create infrastructure -# Start with episode number: -StartCount='16' +mkdir -p record +mkdir -p upload-files -# Release the video at date (YYYY-MM-DD): -StartDatum='2017-10-11' +touch last_upload_date.txt + +# Create Discreption + +echo '' > .source.tmp +echo '' > .desc.tmp + +# Create YT infos + +echo "Create YouTube Informations" +printf "Title:"; + read -r TITLE + +printf "Category (Default Gaming):" + read -r CATEGORY + +printf "Playlist:" + read -r PLAYLIST + +printf "TAGS (seperate with commas. If Empty then native linux gaming):" + read -r TAGS + +# Create YT description file + +printf "Developer Name:" + read -r DEVS + +printf "Linux Kernel Version:" + read -r KERNEL + +printf "CPU (Default i5 6500):" + read -r CPU + +printf "RAM (Default 16 GB DDR4):" + read -r RAM + +printf "Graphiccard (Default NVIDIA GTX 1060 6GB):" + read -r GRAPHIC + +printf "Driver Version (Default Nvidia proprietary driver):" + read -r DRIVER + +printf "Buy it on Steam:" + read -r STEAM + +printf "Buy it on HumbleBUndle:" + read -r HB + +printf "Buy it on GOG:" + read -r GOG + +printf "Buy it on Itch.io:" + read -r ITCH + +printf "Record Date:" + read -r RECORD -# Video Informations: -# Replace the XXX with the titel how every episode should be called -Titel='"XXX' -# Replace the XXX with the name of the category you want to use -Kategorie='XXX' -# Replace the XXX for the Name which playlist should be used -Playlist='"XXX"' -# Set the time for the release -Release='12:00:00.000+02:00' -# Set the tags you want use for alle the clips. Seperate with "," -Tags='"XXX,YYY,ZZZ,..."' -# Set a description for all the clips -Beschreibung='"South Park Stick of truth lets play"' -# Replace the XXX how all the files begin -File='"XXX ' -# Set path where te files are -Path='/path/to/the/files' +if [ -z $CATEGORY ]; then + CATEGORY="Gaming" +fi + +if [ -z $TAGS ]; then + TAGS="Games, Gaming, Linux, Walktrought, Arch Linux, Lets Play, Native" +fi + +if [ -z $CPU ]; then + CPU="Intel i5 6500" +fi + +if [ -z $RAM ]; then + RAM="16 GB DDR4" +fi + +if [ -z $GRAPHIC ]; then + GRAPHIC="NVIDIA GTX 1060 6GB" +fi + +if [ -z $DRIVER ]; then + DRIVER="Nvidia proprietary driver" +fi + +if [ -z $STEAM ]; then + STEAM="-" +fi + +if [ -z $HB ]; then + HB="-" +fi + +if [ -z $GOG ]; then + GOG="-" +fi + +if [ -z $ITCH ]; then + ITCH="-" +fi + +echo "Title='\"$TITLE '" >>.source.tmp +echo "Kategorie='$CATEGORY'" >>.source.tmp +echo "Playlist='\"$PLAYLIST\"'" >>.source.tmp +echo "Tags='\"$TAGS\"'" >>.source.tmp + +echo -e "$TITLE - Lets Play on Arch Linux\n\nEntiwckler: $DEVS\n\nAufgenommen mit: OBS Studio\nBetriebssystem: Arch Linux\nKernel: $KERNEL\n\nHardware\nCPU: $CPU\nRAM: $RAM\nGrafikkarte: $GRAPHIC\nTreiber: $DRIVER\n\nBuy it on Steam: $STEAM\nBuy it on Humblebundle: $HB\nBuy it on GOG: $GOG\nBuy it on Itch.io: $ITCH\n\nRecord date: $RECORD" > .desc.tmp + + +# Rename recorded file names + +printf "Game Name?: " + read -r FILES + +if [ -z $FILES ]; then + FILES=default-name +fi + +cd record + +a=1 + +for i in *.mp4; do + new=$(printf "$FILES#%d.mp4" "$a") + mv -i -- "$i" "$new" + let a=a+1 +done + +# create thumbnails + +for i in *.mp4; do + name=`echo "$i" | cut -d'.' -f1` + echo "$name" + ffmpeg -y -i "$i" -vframes 1 -an -filter:v scale=1920:-1 -ss 30 ../upload-files/"${name}.jpg" +done + +# modify thumbnail with thumb.png + +for i in ../upload-files/*.jpg; do + composite -gravity center thumb.png $i ../upload-files/$i +done + +# Transcode the files into smaller ones + +for i in *.mp4; + do name=`echo "$i" | cut -d'.' -f1` + echo "$name" + ffmpeg -y \ + -i "$i" \ + -sseof -1 \ + -copyts \ + -hwaccel_device 0 \ + -hwaccel_output_format cuda \ + -hwaccel cuvid \ + -c:v h264_cuvid \ + -i "$i" \ + -b:v 5M \ + -minrate 5M \ + -maxrate 10M \ + -bufsize 10M \ + -profile:v high \ + -pixel_format cuda \ + -filter_complex \ + "[1]hwdownload,format=nv12,fade=out:0:30[t];\ + [0][t]overlay,fade=in:0:30[v];\ + anullsrc,atrim=0:2[at];[0][at]acrossfade=d=1,afade=d=1[a]" \ + -map "[v]" -map "[a]" \ + -vcodec h264_nvenc \ + ../upload-files/"${name}.mp4" +done + +cd .. +# Modify Thumbnails With Numbers and Filename + +cd upload-files + +for i in *.jpg; do + convert "$i" \ + -pointsize 240 \ + -gravity south -stroke '#000C' -strokewidth 10 \ + -annotate - "#$(echo $i| sed -e 's/^.*#//g' -e 's/.jpg//g')" \ + -stroke none -fill white \ + -annotate - "#$(echo $i| sed -e 's/^.*#//g' -e 's/.jpg//g')" \ + "$i"; +done + +cd .. +# Create Upload script + +source .source.tmp # Don't edit anything here +Path='upload-files/*.mp4' +Episoden=$(ls $Path | wc -l) DayCount='0' -StopCount=$(expr $StartCount + $Episoden) +StartCount='1' +StopCount=$(expr $StartCount + $Episoden ) Sichtbarkeit='private' +Release='12:00:00.000+02:00' +File=$(ls $Path| sed -e 's/#.*//g' -e 's/upload-files\///g'| uniq) +StartDatum=$(cat last_upload_date.txt) -# simple loop script. This part generate a upload.sh for every clip you want to upload to YouTube, +# simple loop script. This part generate a upload.sh for every clip you want to upload to YouTube, # then it run the second script and after the upload the scond script will be deleted. -echo "#!/bin/bash" > upload.sh +echo "#!/bin/bash" > upload-files/upload-$(echo $Playlist|sed -e 's/\"//g' -e 's/ /_/g').sh - while [ $StartCount -lt $StopCount ]; do - echo youtube-upload --title $Titel $StartCount"\"" --category=$Kategorie --playlist=""$Playlist"" --privacy=$Sichtbarkeit --publish-at=$(date +%Y-%m-%d -d "$StartDatum + $DayCount day")T$Release --tags=""$Tags"" --description=""$Beschreibung"" $Path$File $StartCount.mp4"\"" - let StartCount=StartCount+1 - let DayCount=DayCount+1 - done >> upload.sh +while [ $StartCount -lt $StopCount ]; do + echo youtube-upload \ + --thumbnail=\"$File#$StartCount.jpg\" \ + --title $Title\#$StartCount"\"" \ + --category=$Kategorie \ + --playlist=""$Playlist"" \ + --privacy=$Sichtbarkeit \ + --publish-at=$(date +%Y-%m-%d -d "$StartDatum + $DayCount day")T$Release \ + --tags=""$Tags"" \ + --description-file=desc-$(echo $Playlist|sed -e 's/\"//g' -e 's/ /_/g').txt \ + \"$File#$StartCount.mp4\" + let StartCount=StartCount+1 + let DayCount=DayCount+1 +done >> upload-files/upload-$(echo $Playlist|sed -e 's/\"//g' -e 's/ /_/g').sh -chmod +x upload.sh -./upload.sh -rm upload.sh +sed -i -e 's/^youtube/sleep 21600;youtube/g' -e 's/$/;/g' upload-files/upload-$(echo $Playlist|sed -e 's/\"//g' -e 's/ /_/g').sh +date +%Y-%m-%d -d "$(cat last_upload_date.txt) + $(ls $Path| wc -l) day" > last_upload_date.txt +mv upload-files/ upload-$(echo $Playlist|sed -e 's/\"//g' -e 's/ /_/g') +mkdir upload-files +cp .desc.tmp upload-$(echo $Playlist|sed -e 's/\"//g' -e 's/ /_/g')/desc-$(echo $Playlist|sed -e 's/\"//g' -e 's/ /_/g').txt + + +rm .source.tmp +rm .desc.tmp \ No newline at end of file