137 lines
No EOL
4.2 KiB
Bash
137 lines
No EOL
4.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
|
|
################### VARIABLES ###################
|
|
|
|
inputDir="/tank/stuff/clip_todo"
|
|
outputDir="/tank/drive/Clips/$(date +%F)"
|
|
|
|
telegramChatID=-1001806754988
|
|
telegramBotToken=2100152808:AAFZSbL4x925tEv-vnmwotXYHcQapCxOO1w
|
|
|
|
################### VARIABLES ###################
|
|
|
|
|
|
|
|
function encodeAV1 {
|
|
local input=$1
|
|
local output=$2
|
|
|
|
docker run --rm --group-add 105 --group-add 5555 \
|
|
--device=/dev/dri:/dev/dri -v "$(dirname "$input"):/in:ro" -v "$(dirname "$output"):/out:rw" linuxserver/ffmpeg:latest \
|
|
-y -hide_banner -loglevel error \
|
|
-hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv=hw -filter_hw_device hw -extra_hw_frames 100 \
|
|
-i "/in/$(basename "$input")" \
|
|
-vf hwupload=extra_hw_frames=100,format=qsv,scale_qsv=w=1920:h=1080,fps=60 \
|
|
-c:v av1_qsv -preset veryslow -low_power 1 -adaptive_i 1 -adaptive_b 1 -extbrc 1 -global_quality:v 26 -look_ahead_depth 100 \
|
|
-c:a libopus -b:a 128K \
|
|
"/out/$(basename "$input")"
|
|
}
|
|
|
|
function encodeJPG {
|
|
local input=$1
|
|
local output=$2
|
|
|
|
docker run --rm --group-add 105 --group-add 5555 \
|
|
-v "$(dirname "$input"):/in:ro" -v "$(dirname "$output"):/out:rw" linuxserver/ffmpeg:latest \
|
|
-y -hide_banner -loglevel error \
|
|
-i "/in/$(basename "$input")" \
|
|
-frames:v 1 -c:v png -filter:v scale=\'if\(gt\(a,320/500\),320,-1\)\':\'if\(gt\(a,320/500\),-1,500\)\' \
|
|
"/out/$(basename "$output" jpg)png"
|
|
|
|
docker run --rm --group-add 105 --group-add 5555 \
|
|
-v "$(dirname "$output"):/inout:rw" dpokidov/imagemagick:latest \
|
|
"/inout/$(basename "$output" jpg)png" \
|
|
-strip -interlace Plane -quality 85% \
|
|
"/inout/$(basename "$output")"
|
|
|
|
rm "$(dirname "$output")/$(basename "$output" jpg)png"
|
|
}
|
|
|
|
function syncRemote {
|
|
local input=$1
|
|
local output=$2
|
|
|
|
rclone --config ./rclone.conf sync "$input" "$output" --exclude '.*/**'
|
|
}
|
|
|
|
function sendVideo {
|
|
local video=$1
|
|
local thumbnail=$2
|
|
local caption=$3
|
|
|
|
curl --fail --silent --show-error -X POST \
|
|
"https://api.telegram.org/bot$telegramBotToken/sendVideo" \
|
|
-F video=@"$video" \
|
|
-F thumbnail=@"$thumbnail" \
|
|
-F "chat_id=$telegramChatID" \
|
|
-F "width=$(ffprobe -v error -select_streams v:0 -show_entries stream=width -of default=nw=1:nk=1 "$video")" \
|
|
-F "height=$(ffprobe -v error -select_streams v:0 -show_entries stream=height -of default=nw=1:nk=1 "$video")" \
|
|
-F "duration=$(ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=nw=1:nk=1 "$video" | xargs printf '%0.0f\n')" \
|
|
-F "supports_streaming=true" \
|
|
-F "caption=$caption"
|
|
}
|
|
|
|
|
|
function sendPhoto {
|
|
local photo=$1
|
|
local caption=$2
|
|
|
|
curl --fail --silent --show-error -X POST \
|
|
"https://api.telegram.org/bot$telegramBotToken/sendPhoto" \
|
|
-F photo=@"$photo" \
|
|
-F "chat_id=$telegramChatID" \
|
|
-F "caption=$caption"
|
|
}
|
|
|
|
function runChmod {
|
|
chmod -R 775 "$@"
|
|
chown -R melchior:melchior "$@"
|
|
}
|
|
|
|
|
|
function checkRoot {
|
|
if [ "$EUID" -ne 0 ]
|
|
then echo "Please run as root"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
|
|
function main {
|
|
mkdir -p "$outputDir/.high"
|
|
|
|
runChmod "$outputDir" "$inputDir"
|
|
|
|
find "$inputDir" -type f -name '*.mp4' | while read filepath; do
|
|
local mp4out="$outputDir"/$(basename "$filepath")
|
|
local jpgout="$outputDir"/$(basename "$filepath" mp4)jpg
|
|
|
|
encodeAV1 "$filepath" "$mp4out" &
|
|
local waitAV1=$!
|
|
encodeJPG "$filepath" "$jpgout" &
|
|
local waitJPG=$!
|
|
|
|
wait $waitJPG $waitAV1
|
|
|
|
if [ $(du -sb "$mp4out" | cut -f1) -le 52428585 ]
|
|
then
|
|
sendVideo "$mp4out" "$jpgout" "Link for iOS: https://clips.watn3y.de/$(echo "$(dirname "$mp4out" | sed 's,^\(.*/\)\?\([^/]*\),\2,')/$(basename "$mp4out")" | jq '@uri' -jRr )" &
|
|
else
|
|
sendPhoto "$jpgout" "Link for iOS: https://clips.watn3y.de/$(echo "$(dirname "$mp4out" | sed 's,^\(.*/\)\?\([^/]*\),\2,')/$(basename "$mp4out")" | jq '@uri' -jRr )" &
|
|
fi
|
|
#local waitCURL=$!
|
|
|
|
mv "$filepath" "$outputDir/.high"
|
|
|
|
done
|
|
syncRemote "$outputDir" "stricted-net:/$(basename "$outputDir")" &
|
|
wait
|
|
|
|
runChmod "$outputDir" "$inputDir"
|
|
wait
|
|
}
|
|
|
|
main
|
|
printf "\n" |