diff --git a/MyIA.AI.Notebooks/GenAI/Video/01-Foundation/01-1-Video-Operations-Basics.ipynb b/MyIA.AI.Notebooks/GenAI/Video/01-Foundation/01-1-Video-Operations-Basics.ipynb index c0341f3fffc..9194abef682 100644 --- a/MyIA.AI.Notebooks/GenAI/Video/01-Foundation/01-1-Video-Operations-Basics.ipynb +++ b/MyIA.AI.Notebooks/GenAI/Video/01-Foundation/01-1-Video-Operations-Basics.ipynb @@ -1083,24 +1083,9 @@ "### Lecture du résultat — exemple guidé 1 (fondu enchaîné)\n", "\n", "- **Durée `4.00s` et non `5.00s`** : trois segments de 1,667 s mis bout à bout font 5 s, mais chaque fondu fait **chevaucher** deux segments pendant 0,5 s. Avec 2 fondus, on perd 2 × 0,5 = 1 s — la signature du chevauchement (`padding=-0.5`) plutôt qu'un simple enchaînement. Cette durée est celle de la **composition en mémoire** ; plus bas, l'analyse comparative de la Section 3 **re-sonde le fichier écrit** (`ffmpeg.probe` sur `crossfade.mp4` → `4.0` s). C'est cette seconde lecture, indépendante de moviepy, qui ferme la vérification : les deux mesures concordent.\n", - "- **La figure du milieu montre deux cercles semi-transparents** : c'est le fondu enchaîné lui-même — la fin du segment 1 (cercle à droite) et le début du segment 2 (cercle à gauche) sont visibles en même temps, chacun à ~50 % d'opacité. Un simple `FadeOut`/`FadeIn` aurait au contraire fait passer l'image par le noir." - ] - }, - { - "cell_type": "markdown", - "id": "d2648e6f", - "metadata": { - "papermill": { - "duration": 0.005693, - "end_time": "2026-09-29T23:02:13.395477", - "exception": false, - "start_time": "2026-09-29T23:02:13.389784", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "### Interpretation : Manipulations moviepy\n", + "- **La figure du milieu montre deux cercles semi-transparents** : c'est le fondu enchaîné lui-même — la fin du segment 1 (cercle à droite) et le début du segment 2 (cercle à gauche) sont visibles en même temps, chacun à ~50 % d'opacité. Un simple `FadeOut`/`FadeIn` aurait au contraire fait passer l'image par le noir.\n", + "\n", + "**Les manipulations moviepy, en un coup d'œil**\n", "\n", "| Opération | Méthode | Description |\n", "|-----------|---------|-------------|\n", @@ -1112,12 +1097,18 @@ "**Points clés** :\n", "1. moviepy travaille de maniere paresseuse (lazy) : les frames ne sont calculees qu'a l'ecriture\n", "2. Toujours fermer les clips avec `.close()` pour liberer les handles FFmpeg\n", - "3. Dans moviepy 2.x, `TextClip(text=..., font=chemin_ttf, ...)` rend le texte via Pillow : il faut un fichier de police TTF (ici DejaVuSans, embarquee avec matplotlib)\n", - "\n", + "3. Dans moviepy 2.x, `TextClip(text=..., font=chemin_ttf, ...)` rend le texte via Pillow : il faut un fichier de police TTF (ici DejaVuSans, embarquee avec matplotlib)\n" + ] + }, + { + "cell_type": "markdown", + "id": "cell-sec3-ffmpeg", + "metadata": {}, + "source": [ "## Section 3 : Analyse des metadonnees avec ffmpeg-python\n", "\n", "ffmpeg-python permet d'interroger les metadonnees d'un fichier video sans le decoder entierement.\n", - "C'est beaucoup plus rapide que de charger la video complete." + "C'est beaucoup plus rapide que de charger la video complete.\n" ] }, { diff --git a/MyIA.AI.Notebooks/GenAI/Video/04-Applications/04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb b/MyIA.AI.Notebooks/GenAI/Video/04-Applications/04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb index af16d6a3f34..d658e5d6186 100644 --- a/MyIA.AI.Notebooks/GenAI/Video/04-Applications/04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb +++ b/MyIA.AI.Notebooks/GenAI/Video/04-Applications/04-5b-MiniMax-video-01-v1-Cloud-Video.ipynb @@ -424,32 +424,15 @@ "id": "6db27ef8", "metadata": {}, "source": [ - "**Lecture chiffree — le verdict OK atteste une generation reelle, pas une extrapolation.** Le JSON commite rend `\"actual_status\": 200`, un task_id `\"431137218855159\"`, `\"status_code\": 0` et `\"verdict\": \"OK\"` : la sonde a debite exactement une generation sur le quota journalier consenti — la cle etait disponible au setup et le parametre de depense leve la garde no_post. La section precedente decrit le regime sans cle (verdict structurel, rien de debite) ; cette sortie-ci est l'autre regime, execute : le verdict est firsthand, c'est la reponse du service, pas une lecture de sa documentation.\n" - ] - }, - { - "cell_type": "markdown", - "id": "4431ef15", - "metadata": { - "papermill": { - "duration": 0.004214, - "end_time": "2026-08-15T16:36:04.042397", - "exception": false, - "start_time": "2026-08-15T16:36:04.038183", - "status": "completed" - }, - "tags": [] - }, - "source": [ - "### Interpretation — le verdict DESCRIPTIF_STUB est une feature, pas un echec\n", + "**Lecture chiffree — le verdict OK atteste une generation reelle, pas une extrapolation.** Le JSON commite rend `\"actual_status\": 200`, un task_id `\"431137218855159\"`, `\"status_code\": 0` et `\"verdict\": \"OK\"` : la sonde a debite exactement une generation sur le quota journalier consenti — la cle etait disponible au setup et le parametre de depense leve la garde no_post. La section precedente decrit le regime sans cle (verdict structurel, rien de debite) ; cette sortie-ci est l'autre regime, execute : le verdict est firsthand, c'est la reponse du service, pas une lecture de sa documentation.\n", "\n", - "Tant que `MINIMAX_GENAI_API_KEY` n'est pas livree, le notebook reste **execut-able SANS cle** et rend un verdict structurel (`DESCRIPTIF_STUB`) sur la forme des requetes/responses. C'est la **meme posture cle que 04-5** : key-gated skeleton.\n", + "**Et le mode descriptif ?** Tant que `MINIMAX_GENAI_API_KEY` n'est pas livree, le notebook reste **execut-able SANS cle** et rend un verdict structurel (`DESCRIPTIF_STUB`) sur la forme des requetes/responses. C'est la **meme posture cle que 04-5** : key-gated skeleton.\n", "\n", "Trois garanties portees par ce mode descriptif :\n", "\n", "- **0 generation reelle debit** — la sonde ne POST jamais sans `no_post=False` ET cle ET quota=1. Plafond=1 du cycle 196 preserve.\n", "- **Verdict structurel reproductible** — la sortie de la sonde est deterministe (meme payload, meme verdict). Permet de tester les exercices sans dependre d'un service externe.\n", - "- **Migration vers mode generation triviale** : passer `MINIMAX_SPEND_QUOTA=1`, livrer `MINIMAX_GENAI_API_KEY`, appeler `probe_minimax_video(payload=..., no_post=False)`. La sonde bascule en mode reel sans autre changement de code." + "- **Migration vers mode generation triviale** : passer `MINIMAX_SPEND_QUOTA=1`, livrer `MINIMAX_GENAI_API_KEY`, appeler `probe_minimax_video(payload=..., no_post=False)`. La sonde bascule en mode reel sans autre changement de code.\n" ] }, {