Files
DanceVideos/program1/program1.sh

144 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
SCRIPTS_DIR=$(dirname `realpath ${BASH_SOURCE[0]}`)
# === CONFIGURATION ===
export DOSSIER_SOURCE="${HOME}/Downloads"
export DOSSIER_DESTINATION_RAW="${HOME}/Documents/.DanceVideos/raw"
sanitize_name() {
local name="$1"
basename "$name" \
| tr '[:upper:]' '[:lower:]' \
| tr ' ' '_' \
| tr -cd '[:alnum:]._-\n'
}
export -f sanitize_name
# Fonction pour vérifier et déplacer un fichier
check_and_move() {
local fichier="$1"
local taille1 taille2
taille1=$(stat -f "%z" "$fichier")
sleep 5
taille2=$(stat -f "%z" "$fichier")
if [ "$taille1" -eq "$taille2" ] && [ "$taille2" -gt 0 ]; then
echo "Déplacement de $(basename "$fichier")"
rsync -av --remove-source-files "$fichier" "$DOSSIER_DESTINATION_RAW/$(sanitize_name "$(basename "$fichier")")"
else
echo "Fichier $(basename "$fichier") encore en cours de réception."
fi
}
export -f check_and_move
import_downloaded_file() {
find "$DOSSIER_SOURCE" -maxdepth 1 -type f \( -iname "*.mp4" -o -iname "*.mov" \) -print0 \
| parallel -0 -j 4 check_and_move
}
import_downloaded_file
##
export DOSSIER_DESTINATION_MP4="$(dirname $DOSSIER_DESTINATION_RAW)/videos"
## DB utilities
export DANCE_VIDEOS_DB="$(dirname $DOSSIER_DESTINATION_RAW)/db.sqlite"
export MODEL_DIR=$(realpath $SCRIPTS_DIR/../model)
cat $MODEL_DIR/videos.sql | sqlite3 $DANCE_VIDEOS_DB
source $MODEL_DIR/register_video.sh
# register_video \
# file_name raw_file duration mp4_file \
# rotated_file thumbnail_file record_datetime day_of_week \
# lat long address
source $SCRIPTS_DIR/metadata.sh
source $SCRIPTS_DIR/rotation.sh
mp4_dir() {
local raw="$1" weekday="$2" address="${3:-wherever}"
address=$(sed 's/[^a-zA-Z0-9]/_/g' <<< $(sanitize_name "$address") | tr -s '_' '_')
local dir=$DOSSIER_DESTINATION_MP4
dir=$dir/$(date -jf "%Y-%m-%dT%H:%M:%S" "$(get_creation_time $raw)" +%Y%m%d_%H%M%S)
dir=${dir}_${weekday}_${address}
mkdir -p $dir
echo $dir
}
export -f mp4_dir
write_thumbnail() {
set -x
local raw="$1"
local thumbnail="$2"
ffmpeg -ss 00:00:03 -i $raw -vframes 1 $thumbnail 2>/dev/null
set +x
}
export -f write_thumbnail
write_mp4() {
local src="$1"
local dst="$2"
[ -e "$dst" ] || reencode_with_rotation $src $dst
}
export -f write_mp4
process_raw_file() {
local raw="$1"
local ct weekday duration lat lon address
IFS="|" read -r ct weekday duration lat lon address <<<"$(process_video "$raw")"
local dir=$(mp4_dir $raw $weekday "$address")
local thumbnail=${dir}/thumbnail.jpg
$(write_thumbnail $raw $thumbnail)
local mp4=${dir}/video.mp4
$(write_mp4 $raw $mp4)
register_video $(basename $raw) "$raw" "$duration" "$mp4" \
"$mp4" "$thumbnail" "'$ct'" "$weekday" \
"$lat" "$lon" "$address"
}
export -f process_raw_file
iphone_video() {
local raw="$1"
echo iphone $raw
process_raw_file $raw
}
export -f iphone_video
screen_video() {
local raw="$1"
echo screen $raw
process_raw_file $raw
}
export -f screen_video
whatsapp_video() {
local raw="$1"
echo whatsapp $raw
process_raw_file $raw
}
export -f whatsapp_video
convert_raws() {
# ##_##.mov
find "$DOSSIER_DESTINATION_RAW" -type f \
-name "*.mov" \
-print0 | parallel -0 -j 4 iphone_video
find "$DOSSIER_DESTINATION_RAW" -type f \
-name "screenrecording*.mp4" \
-print0 | parallel -0 -j 4 screen_video
find "$DOSSIER_DESTINATION_RAW" -type f \
-name '*[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f]-[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]*.mp4' \
-print0 | parallel -0 -j 4 whatsapp_video
}
convert_raws