cctv-scheduler/converter.sh

166 lines
3.8 KiB
Bash
Raw Normal View History

2023-02-01 13:31:36 +03:00
#! /bin/bash
#
2023-02-11 22:30:06 +03:00
## DESCRIPTION:
# JPEG to MP4 converter.
# This is only a local "proof of conept" for testing and debugging.
2023-02-01 13:31:36 +03:00
#
#
## DEPENDENCIES: sudo apt|yum install -y ffmpeg
#
#
## FUNCTIONS
#
addtologs() {
echo "$(date +'%Y.%m.%d-%H:%M:%S') $1" | tee -a $logs
}
execpause() {
read -p "Press [ENTER] to continue... "
}
execquite() {
addtologs "execution time is $(($(date +%s)-$time)) seconds, exit"
if [ "${show}" != "qn" ];then
execpause
fi
exit
}
execerror() {
addtologs "error: $1"
2023-02-18 10:22:35 +03:00
curl -s -X POST $telegramapiurl/sendMessage -d chat_id=$telegramchatid -d text="$(basename -s .sh $0) error: $1" >> /dev/null 2>&1
2023-02-01 13:31:36 +03:00
execquite
}
getconfig() {
logs=$(cat $conf | grep "logs=" | cut -d= -f2)
list=$(cat $conf | grep "list=" | cut -d= -f2)
imgroot=$(cat $conf | grep "imgroot=" | cut -d= -f2)
imgnames=($(cat $conf | grep "imgnames=" | cut -d= -f2))
xscale=$(cat $conf | grep "xscale=" | cut -d= -f2)
yscale=$(cat $conf | grep "yscale=" | cut -d= -f2)
mp4fps=$(cat $conf | grep "mp4fps=" | cut -d= -f2)
2023-02-11 22:30:06 +03:00
telegramapiurl=$(cat $conf | grep "telegramapiurl=" | cut -d= -f2)
telegramchatid=$(cat $conf | grep "telegramchatid=" | cut -d= -f2)
2023-02-01 13:31:36 +03:00
}
#
## PARAMETERS
#
show=${1}
conf=${2}
if [ -z "${conf}" ] || [ "${conf}" == "-" ];then
conf="$(dirname $(realpath "$0"))/$(basename -s .sh $0).conf"
fi
when=${3}
if [ -z "$when" ]; then
d=$(date +"%d")
w=$(date +"%V")
m=$(date +"%m")
y=$(date +"%Y")
duration=1
imgpath=$y/$m/$w/$d
imgname=$y.$m.$d
fi
if [ "$when" == "-d" ]; then
d=$(date -d "-1 day" +"%d")
m=$(date +"%m")
if [ "$(date -d '-1 day' +'%m')" != "$(date +'%m')" ]; then
m=$(date -d '-1 day' +'%m')
fi
y=$(date +"%Y")
if [ "$(date -d '-1 day' +'%Y')" != "$(date +'%Y')" ]; then
y=$(date -d '-1 day' +'%Y')
fi
w=$(date +"%V")
if [ "$(date +'%w')" == "1" ]; then
w=$(date -d "-1 week" +"%V")
fi
duration=1
imgpath=$y/$m/$w/$d
imgname=$y.$m.$d
fi
if [ "$when" == "-w" ]; then
w=$(date -d "-1 week" +"%V")
m=$(date +"%m")
if [ "$(date -d '-1 week' +'%m')" != "$(date +'%m')" ]; then
m=$(date -d '-1 week' +'%m')
fi
y=$(date +"%Y")
if [ "$(date -d '-1 week' +'%Y')" != "$(date +'%Y')" ]; then
y=$(date -d '-1 week' +'%Y')
fi
duration=7
imgpath=$y/*/$w
imgname=$y-w$w
fi
if [ "$when" == "-m" ]; then
m=$(date -d "-1 month" +"%m")
y=$(date +"%Y")
if [ "$(date -d '-1 month' +'%Y')" != "$(date +'%Y')" ]; then
y=$(date -d '-1 month' +'%Y')
fi
duration=30
imgpath=$y/$m
imgname=$y.$m
fi
if [ "$when" == "-y" ]; then
y=$(date -d "-1 year" +"%Y")
duration=360
imgpath=$y
imgname=$y
fi
#
## VARIABLES
#
time=$(date +%s)
cd "$(dirname "$(realpath "$0")")"
if [ ! -e ${conf} ];then
execerror "Not found config file: ${conf}"
else
getconfig
fi
if [ -z "${logs}" ];then
logs=/dev/null
elif [ ! -e ${logs} ];then
touch ${logs}
fi
if [ -z "${list}" ];then
list="$(dirname $(realpath "$0"))/$(basename -s .sh $0).list"
fi
if [ ! -e ${list} ];then
touch ${list}
fi
if ! command -v ffmpeg &> /dev/null; then
execerror "Not found dependencies"
fi
#
## RUN
#
for name in ${imgnames[*]}; do
imgmatch="*$name*.jpeg"
imgarray=()
while read FILE; do
imgarray+=("${FILE}")
done < <(find $imgroot/$imgpath -name "$imgmatch" | sort)
imgcount=${#imgarray[*]}
echo '' > $list
for item in ${imgarray[*]}; do
echo file \'$item\' >> $list
done
imgdest=$imgroot/$name\_$imgname.mp4
echo $imgdest
#ffmpeg -r $imgcount/$duration -f concat -safe 0 -i $list -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -t $duration -c:v libx264 -vf "scale=$xscale:$yscale,fps=$mp4fps,format=yuv420p" -c:a aac $imgdest -y
ffmpeg -r $imgcount/$duration -f concat -safe 0 -i $list -c:v libx264 -vf "scale=$xscale:$yscale,fps=$mp4fps,format=yuv420p" $imgdest -y \
&& addtologs "converted $imgcount images to $imgdest with duration $duration" \
|| execerror "converted $imgcount images to $imgdest with duration $duration"
done
execquite