2024-05-23 01:23:48 -03:00
|
|
|
#!/bin/sh
|
2024-07-10 15:26:42 -03:00
|
|
|
SRC=collections/_aulas
|
2024-08-01 17:19:19 -03:00
|
|
|
# SCRIPT=script/
|
|
|
|
SCRIPT=/var/www/src/AliceClass/script/
|
|
|
|
# TMP=tmp
|
|
|
|
TMP=$(mktemp -d)
|
|
|
|
ASSETS="$TMP/assets"
|
2024-07-10 14:19:15 -03:00
|
|
|
PARAM="scale=1920:1080: force_original_aspect_ratio=decrease: eval=frame,pad=1920:1080: -1:-1:color=black"
|
|
|
|
|
|
|
|
|
2024-08-01 17:19:19 -03:00
|
|
|
process_video () {
|
|
|
|
NAME=$1
|
|
|
|
AUTHOR=$2
|
|
|
|
INPUT=$3
|
|
|
|
AULA=$4
|
|
|
|
OUTPUT=$5
|
2024-05-23 01:23:48 -03:00
|
|
|
|
2024-08-01 17:19:19 -03:00
|
|
|
# no output path
|
|
|
|
if [ -z "$OUTPUT" ]; then
|
|
|
|
OUTPUT="$ASSETS/videos/${NAME}.mp4"
|
|
|
|
fi
|
2024-05-23 01:23:48 -03:00
|
|
|
|
2024-08-05 22:36:03 -03:00
|
|
|
THUMB_PATH=$(dirname $OUTPUT)/${NAME}
|
|
|
|
|
2024-05-23 01:23:48 -03:00
|
|
|
echo "########################################"
|
2024-08-01 17:19:19 -03:00
|
|
|
echo "# Aula: ${AULA}"
|
2024-05-23 01:23:48 -03:00
|
|
|
echo "# Author: ${AUTHOR}"
|
|
|
|
echo "# Input: ${INPUT}"
|
|
|
|
echo "# Src: ${SRC}"
|
2024-08-01 17:19:19 -03:00
|
|
|
echo "# Dest: ${OUTPUT}"
|
2024-05-23 01:23:48 -03:00
|
|
|
echo "# Name: ${NAME}"
|
|
|
|
echo "# Script Path: ${SCRIPT}"
|
|
|
|
echo "########################################"
|
2024-08-01 17:19:19 -03:00
|
|
|
# exit
|
2024-05-23 01:23:48 -03:00
|
|
|
|
|
|
|
# ####################################
|
|
|
|
# Creating the thumbnail if does not exist
|
|
|
|
# ####################################
|
2024-08-05 22:36:03 -03:00
|
|
|
if test ! -f "${THUMB_PATH}.jpg" ; then
|
|
|
|
ffmpeg -y -i "${INPUT}" -vframes 1 -an -s 400x222 -ss 30 "${THUMB_PATH}.jpg"
|
2024-05-23 01:23:48 -03:00
|
|
|
fi
|
|
|
|
|
|
|
|
# ####################################
|
|
|
|
# if output exist, continue
|
|
|
|
# ####################################
|
2024-08-01 17:19:19 -03:00
|
|
|
if test -f "$ASSETS/videos/${NAME}.mp4" ; then
|
2024-05-23 01:23:48 -03:00
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
# ####################################
|
|
|
|
# Creating the intro clip
|
|
|
|
# ####################################
|
2024-08-01 17:19:19 -03:00
|
|
|
# sed "s/nomenome/$AUTHOR/g" ${SCRIPT}/intro.svg | sed "s/curso/${NAME}/g" > ${TMP}/tmp-intro.svg
|
|
|
|
sed "s/nomenome/$AUTHOR/g; s/curso/${NAME}/g" ${SCRIPT}/intro.svg > ${TMP}/tmp-intro.svg
|
2024-07-10 14:19:15 -03:00
|
|
|
ffmpeg -y -loop 1 -i ${TMP}/tmp-intro.svg -i ${SCRIPT}/intro.wav -shortest ${TMP}/tmp-intro.mkv
|
2024-05-23 01:23:48 -03:00
|
|
|
|
|
|
|
# ###################################################
|
|
|
|
# Audio adjustment
|
|
|
|
# ###################################################
|
|
|
|
# Some possible options
|
|
|
|
# -af loudnorm
|
|
|
|
# -af dynaudnorm=p=1
|
|
|
|
# -af speechnorm=e=12.5:r=0.0001:l=1
|
|
|
|
# -af acompressor=threshold=0.089:ratio=9:attack=200:release=1000:makeup=2
|
2024-07-10 14:19:15 -03:00
|
|
|
ffmpeg -y -i "${INPUT}" -af dynaudnorm=p=1 ${TMP}/tmp-normalized.mkv
|
2024-05-23 01:23:48 -03:00
|
|
|
|
|
|
|
# ####################################################
|
|
|
|
# Wartermarking the video file
|
|
|
|
# ####################################################
|
2024-07-10 14:19:15 -03:00
|
|
|
sed "s/nomenome/$AUTHOR/g" ${SCRIPT}/watermark.svg | sed "s/curso/${NAME}/g" > ${TMP}/tmp-watermark.svg
|
2024-05-23 01:23:48 -03:00
|
|
|
# add watermark to video
|
2024-07-10 14:19:15 -03:00
|
|
|
ffmpeg -y -i ${TMP}/tmp-normalized.mkv -i ${TMP}/tmp-watermark.svg -i ${SCRIPT}/logo.png \
|
|
|
|
-filter_complex "[0][1]overlay=5:H-h-5:format=auto[bg];[bg][2]overlay=W-w-5:5:format=auto" -c:a copy ${TMP}/tmp-video.mkv
|
2024-05-23 01:23:48 -03:00
|
|
|
|
|
|
|
# ####################################################
|
|
|
|
# Concatenating videos
|
|
|
|
# ####################################################
|
2024-07-10 17:27:31 -03:00
|
|
|
|
|
|
|
echo "Concatenando videos..."
|
2024-05-23 01:23:48 -03:00
|
|
|
ffmpeg -y \
|
2024-07-10 14:19:15 -03:00
|
|
|
-i ${TMP}/tmp-intro.mkv \
|
|
|
|
-i ${TMP}/tmp-video.mkv \
|
|
|
|
-i ${TMP}/tmp-credits.mkv \
|
2024-05-23 01:23:48 -03:00
|
|
|
-filter_complex \
|
|
|
|
"[0:v]$PARAM[v0]; [1:v]$PARAM[v1]; [2:v]$PARAM[v2]; [v0][0:a][v1][1:a][v2][2:a] concat=n=3:v=1:a=1 [v] [a]" \
|
|
|
|
-map [v] -map [a] \
|
|
|
|
-s hd720 \
|
|
|
|
-vcodec libx264 \
|
|
|
|
-pix_fmt yuv420p \
|
|
|
|
-vsync 2 \
|
2024-08-01 17:19:19 -03:00
|
|
|
"$OUTPUT"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# mkdir -p ./${TMP}
|
|
|
|
|
|
|
|
# ####################################
|
|
|
|
# Creating the credits clip
|
|
|
|
# ####################################
|
|
|
|
#if test ${TMP}/tmp-credits.mkv -ot ${SCRIPT}/credits.svg ; then
|
|
|
|
echo "########################################"
|
|
|
|
echo "# Gerando o tmp-credits.mkv"
|
|
|
|
echo "########################################"
|
|
|
|
ffmpeg -y -loop 1 -i ${SCRIPT}/credits.svg -i ${SCRIPT}/credits.wav -shortest ${TMP}/tmp-credits.mkv
|
|
|
|
#fi
|
|
|
|
|
|
|
|
# ####################################
|
|
|
|
# Creating dest dir
|
|
|
|
# ####################################
|
|
|
|
mkdir -p $ASSETS/thumbs
|
|
|
|
mkdir -p $ASSETS/videos
|
|
|
|
|
|
|
|
|
|
|
|
if [ $# -gt 1 ]; then
|
|
|
|
NAME=$1
|
|
|
|
AUTHOR=$2
|
|
|
|
INPUT=$3
|
|
|
|
AULA=$4
|
|
|
|
OUTPUT=$5
|
|
|
|
process_video "$NAME" "$AUTHOR" "$INPUT" "$AULA" "$OUTPUT"
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
|
|
|
# for aula in ./${SRC}/*.md; do
|
|
|
|
# # ####################################
|
|
|
|
# # Getting parameters from aulas
|
|
|
|
# # ####################################
|
|
|
|
# NAME="$(basename "${aula}" .md)"
|
|
|
|
# AUTHOR=$(grep "^author: " "${aula}" | sed -e 's/author: //g')
|
|
|
|
# INPUT="${SRC}/${NAME}.mkv"
|
|
|
|
#
|
|
|
|
# process_video "$NAME" "$AUTHOR" "$INPUT"
|
|
|
|
# done
|
2024-05-23 01:23:48 -03:00
|
|
|
|
2024-08-01 17:19:19 -03:00
|
|
|
# rm -f ${TMP}
|