85 lines
3.6 KiB
Markdown
85 lines
3.6 KiB
Markdown
# Dance Videos
|
|
|
|
L'utilisateur prend des vidéos de ses cours de danses avec son iPhone,
|
|
en télécharge depuis son application whatsapp quand on lui partage
|
|
et enregistre l'écran de son téléphone quand certaines vidéos de danses apparaissent.
|
|
|
|
Les vidéos de l'iPhone sont au format .mov et possèdent des tags permettant d'identifier le lieu et le datetime de l'enregistrement.
|
|
Les autres sont en général au format .mp4 et le datetime correspond à la réception et non au moment de la danse.
|
|
|
|
L'utilisateur souhaite dans un premier temps organiser ces vidéos (vidéos de cours, de démo).
|
|
Dans un deuxième temps les convertir à un format adapté à son projecteur pour ses répétitions.
|
|
|
|
Un début de solution a été imaginé:Quand l'utilisateur "air drop" ses vidéos vers son MacBook pro M4,
|
|
cela déclenche un script qui déplacera toutes les vidéos du dossier Téléchargement vers un premier dossier de travail
|
|
et enclenchera le programme que l'on concevra ensemble.
|
|
|
|
Ce programme se chargera de convertir chaque vidéos en .mp4 (en conservant les tags si possibles)
|
|
et en renomant les vidéos aussi bien que possible avec un label parlant.
|
|
|
|
On développera plus tard la manière de construire les règles d'organisation (une combinaison de machine learning et de llm assisté par l'utilisateur).
|
|
|
|
Quand l'utilisateur branche sa carte SD avec un nom bien défini ("SD Danse" par exemple),
|
|
un programme se déclenche pour synchroniser son contenu avec le dossier de sortie où les vidéos sont organisées.
|
|
|
|
## Prérequis
|
|
|
|
1. Mac
|
|
2. Une carte SD nommée SD_DANSE formatée en `MS-DOS (FAT32)` pour un meilleur support des projecteurs
|
|
3. les programmes parallel, exiftool et ffmpeg
|
|
`brew install parallel exiftool ffmpeg`
|
|
4. `uv venv --prompt DanceVideos --allow-existing .venv -p 3.12`
|
|
5. `source .venv/bin/activate && uv pip install -r app/requirements.txt && uv tool install streamlit`
|
|
6. `streamlit run app/app.py`
|
|
|
|
## [Surveillance des répertoires](./doc/01.SurveillerRepertoire.md)
|
|
|
|
- `./trigger/trigger.sh`
|
|
|
|
## Architecture
|
|
|
|
```mermaid
|
|
---
|
|
config:
|
|
logLevel: debug
|
|
theme: forest
|
|
layout: elk
|
|
---
|
|
flowchart TB
|
|
subgraph s1["~/Documents/.DanceVideos/"]
|
|
raw[".DanceVideos/<b>raw</b><br><br><i>00_00.mov, xxxxxx_xxxx_xxxx_xxxx.mp4, ScreenRecordingaaaa-mm-dd_hh-mm-ss.mp4</i>"]
|
|
playlists[".DanceVideos/<b>playlists</b><br><br><i>directories of symbolic links to the videos</i>"]
|
|
videos[".DanceVideos/<b>videos</b><br><br><i>/aaaammdd_hhmmss/<br>video.mp4 videoRotated.mp4 thumbnail.jpeg</i>"]
|
|
pgrm1["program1"]
|
|
bdd["db.sqlite"]
|
|
pgrm2["program2"]
|
|
end
|
|
ios["<b>Iphone</b>"] L_ios_dll_0@-. air drop .-> dll["~/Downloads/"]
|
|
playlists L_playlists_SD_0@== "onSD_DANSEMount.sh" ==> SD["<b>SD card</b>"]
|
|
dll L_dll_raw_0@== "onAirDropDownload.sh" ==> raw
|
|
raw L_raw_pgrm1_0@=== pgrm1
|
|
pgrm1 L_pgrm1_videos_0@== ffmpeg ==> videos
|
|
pgrm1 -- 1) register videos --> bdd
|
|
app["DanceVideos App"] -- 2) classify, register playlists --> bdd
|
|
pgrm2 -- 3) convert playlists to directories of symlink --> playlists
|
|
pgrm2 --- bdd
|
|
videos L_videos_playlists_0@-.- playlists
|
|
raw@{ shape: docs}
|
|
playlists@{ shape: docs}
|
|
videos@{ shape: docs}
|
|
pgrm1@{ shape: text}
|
|
bdd@{ shape: db}
|
|
pgrm2@{ shape: text}
|
|
ios@{ shape: rect}
|
|
dll@{ shape: docs}
|
|
SD@{ shape: das}
|
|
app@{ shape: rect}
|
|
linkStyle 0 stroke:#D50000,fill:none
|
|
linkStyle 1 stroke:#D50000,fill:none
|
|
L_ios_dll_0@{ animation: fast }
|
|
L_playlists_SD_0@{ animation: slow }
|
|
L_dll_raw_0@{ animation: fast }
|
|
L_raw_pgrm1_0@{ animation: slow }
|
|
L_pgrm1_videos_0@{ animation: slow }
|
|
L_videos_playlists_0@{ animation: fast }
|
|
``` |