Add ffmpeg/gaming_av1.sh
This commit is contained in:
parent
c1451b2f66
commit
22d62fe6f5
1 changed files with 137 additions and 0 deletions
137
ffmpeg/gaming_av1.sh
Normal file
137
ffmpeg/gaming_av1.sh
Normal file
|
@ -0,0 +1,137 @@
|
|||
#!/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"
|
Loading…
Reference in a new issue