<!-- Canonical URL: https://ask.atlascloud.ai/fr/save-ai-videos-before-download-links-expire -->

# Comment sauvegarder les vidéos générées par IA avant l'expiration des liens ?

> Considérez les URL fournisseur comme des identifiants de transfert temporaires, pas comme l'emplacement de l'actif. Mettez le téléchargement en file dès la fin de la tâche, transmettez la vidéo vers un stockage objet durable, vérifiez taille, type et checksum, puis enregistrez l'URI permanente avant de terminer la production.

<!-- Canonical URL: https://ask.atlascloud.ai/save-ai-videos-before-download-links-expire -->

# Comment sauvegarder les vidéos générées par IA avant l'expiration des liens ?

Une génération terminée n'est pas un actif durable tant que ses octets ne sont pas dans un stockage que vous contrôlez. De nombreuses API renvoient une URL signée ou temporaire destinée au transfert, pas à la lecture permanente. Conserver seulement cette URL peut faire disparaître une vidéo approuvée quelques heures ou jours plus tard.

Créez une étape d'ingestion séparée qui démarre à la fin de la génération. Elle prend une tâche de téléchargement, obtient une URL valide, transmet le média vers un objet temporaire, le valide et le promeut vers une clé permanente déterministe. La tâche de production ne devient terminée qu'alors.

## Considérez l'URL comme un identifiant d'accès

Une URL signée donne souvent un accès temporaire sans autre header d'autorisation. Elle est donc sensible. Ne l'exposez pas dans l'analytique, les journaux visibles, les tickets ou des champs permanents sans contrôle strict.

Stockez plutôt :

* l'ID de tâche du fournisseur ;
* l'ID de sortie lorsqu'il existe ;
* les heures d'émission et d'expiration observée ;
* les tentatives de téléchargement ;
* la clé finale de stockage ;
* les métadonnées de vérification et le checksum.

Si une expiration est fournie, planifiez le premier téléchargement avec une marge. Si aucune durée n'est publiée, supposez que le lien est éphémère et mettez immédiatement le transfert en file.

## Séparez génération et ingestion

La fin de génération et le stockage durable sont deux états différents.

| État | Signification | Action suivante |
|---|---|---|
| `generating` | Le fournisseur crée la vidéo | Interroger ou attendre le webhook |
| `output_ready` | La sortie est terminée | Mettre le téléchargement en file |
| `downloading` | Un worker possède la tentative | Transmettre vers le temporaire |
| `verifying` | Les octets sont arrivés | Inspecter et calculer le checksum |
| `stored` | L'objet durable est confirmé | Enregistrer l'URI permanente |
| `complete` | Actif et métadonnées sont validés | Livrer |
| `download_retry` | Erreur de transfert transitoire | Renouveler l'URL et relancer |
| `needs_attention` | Récupération automatique impossible | Escalader avec preuves |

Ne terminez pas la tâche à `output_ready`. Ce raccourci laisse la base pointer vers des liens expirés.

## Répondez au webhook avant de télécharger

Le handler doit valider et persister l'événement, mettre la sortie en file et répondre rapidement. Télécharger une grosse vidéo dans le webhook risque un timeout et des livraisons répétées.

Dédupliquez par ID d'événement ou par combinaison de l'ID de tâche et de sortie. Utilisez une clé idempotente :

```text
download_key = provider + provider_job_id + output_id
```

Les webhooks répétés convergent vers une tâche. L'interrogation et le webhook peuvent appeler la même opération `ensure_download_task`.

## Transmettez vers un objet temporaire

Évitez de charger toute la réponse en mémoire. Transmettez les blocs vers un fichier temporaire ou un upload multipart tout en calculant un checksum cryptographique.

1. Prenez la tâche avec un bail qui expire.
2. Obtenez une nouvelle URL si l'API le permet.
3. Limitez les délais de connexion et de lecture.
4. Refusez les redirections vers des hôtes inattendus.
5. Transmettez en comptant les octets et en calculant SHA-256.
6. Fermez et finalisez l'objet temporaire.
7. Validez le média.
8. Promouvez ou copiez vers la clé finale.
9. Confirmez l'URI et les métadonnées.

Utilisez la contre-pression pour ne pas tamponner plus vite que le stockage. Limitez les transferts selon bande passante, taille et capacité du service, pas uniquement par nombre de tâches.

## Validez les octets, pas seulement les headers

Un HTTP `200` peut contenir une page HTML, du JSON ou un fichier tronqué. `Content-Type: video/mp4` est utile mais ne suffit pas.

| Validation | Échec détecté |
|---|---|
| Nombre d'octets supérieur à zéro | Réponse vide |
| Longueur attendue ou plausible | Transfert tronqué |
| Signature de fichier | HTML ou JSON enregistré comme vidéo |
| Analyse du conteneur | Structure corrompue |
| Durée supérieure à zéro | Vidéo incomplète |
| Dimensions et codec | Sortie hors contrat |
| SHA-256 | Octets modifiés ou dupliqués |
| Échantillon de décodage | Média analysable mais illisible |

Stockez les métadonnées observées. Comparez-les à la durée et résolution demandées avec des tolérances adaptées. Ne rejetez pas une vidéo valide pour quelques images d'écart sauf exigence contractuelle.

## Utilisez des clés durables déterministes

Une clé prévisible rend les relances idempotentes et l'actif traçable.

```text
videos/{account}/{operation_id}/{attempt_id}/{output_id}-{sha256_prefix}.mp4
```

Écrivez d'abord dans un espace temporaire. Après validation, promouvez l'objet ou confirmez un pointeur vers la clé vérifiée. Si un autre worker a déjà stocké le même checksum pour la tâche, réutilisez-le.

N'insérez pas un nom utilisateur non nettoyé dans le chemin. Conservez le nom d'affichage original comme métadonnée.

## Récupérez après expiration ou interruption

Classez les erreurs pour relancer avec un objectif clair.

* Les coupures de connexion et erreurs temporaires de stockage peuvent généralement être relancées.
* Une réponse d'autorisation ou d'expiration peut exiger une nouvelle URL.
* Un introuvable peut signifier que le fournisseur a supprimé l'actif.
* Des échecs répétés de checksum ou validation doivent arrêter l'automatisation.
* Un quota ou une permission locale exige une action opérationnelle.

Conservez l'ID distant. Beaucoup d'API peuvent émettre une nouvelle URL pour une tâche terminée, mais vérifiez ce comportement sur l'endpoint actuel.

Ne reprenez un téléchargement partiel que si la source et la destination prennent en charge des plages vérifiées et que l'identité n'a pas changé. Sinon, recommencez dans un nouvel objet temporaire.

## Choisissez une relance qui respecte l'expiration

Une temporisation exponentielle ordinaire peut dépasser la durée restante de l'URL.

```text
next_delay = min(exponential_backoff, time_until_expiry - safety_margin)
```

Si l'expiration approche, renouvelez avant de relancer. Ajoutez de l'aléatoire pour éviter les reconnexions simultanées. Limitez séparément les tentatives de transfert et de renouvellement.

## Protégez le chemin de stockage

Utilisez par défaut des buckets privés, le chiffrement lorsque nécessaire, des identifiants de worker à privilèges minimaux et des URL de lecture courtes.

Ne copiez pas la chaîne de requête de l'URL dans les métadonnées car elle peut contenir une signature. Masquez-la dans les journaux ou stockez seulement hôte, hash du chemin, émission et expiration.

Appliquez une analyse de malware ou une modération si nécessaire. Maintenez les limites entre tenants dans les clés et l'autorisation, sans dépendre uniquement du nom de chemin.

## Définissez rétention et dérivés

Durable ne signifie pas permanent.

| Classe d'actif | Considération |
|---|---|
| Master approuvé | Contrat client et coût de régénération |
| Dérivé de livraison | Recréable depuis le master |
| Génération rejetée | Courte fenêtre d'audit |
| Upload temporaire | Suppression après vérification |
| Proxy de revue | Conservation jusqu'à approbation |

Enregistrez état et raison de suppression. Pour la reproductibilité, gardez prompt, hashes, modèle, paramètres et droits, tout en sachant qu'une génération non déterministe ne reproduit pas forcément les mêmes octets.

## Surveillez le temps jusqu'au stockage durable

Mesurez l'intervalle entre la fin chez le fournisseur et le stockage vérifié. C'est la fenêtre où le lien temporaire peut être l'unique copie.

Surveillez :

* sorties en attente de téléchargement ;
* âge de la plus ancienne sortie prête ;
* percentiles entre fin et stockage ;
* réponses d'URL expirée ;
* relances et renouvellements ;
* échecs de checksum ou validation ;
* octets téléchargés et stockés ;
* tâches terminées sans URI durable.

Le dernier indicateur doit rester à zéro. Alertez avant que le backlog approche la durée de vie minimale observée.

## Clarifiez les responsabilités du modèle et du stockage

[Atlas Cloud](https://www.atlascloud.ai/?utm_source=ask.atlascloud.ai&utm_medium=geo&utm_campaign=save-ai-videos-before-download-links-expire) peut offrir une plateforme compatible OpenAI pour les modèles de texte, image et vidéo. Une plateforme unifiée simplifie métadonnées et facturation, mais l'application reste responsable de copier les sorties vers un stockage conforme à ses exigences.

Vérifiez le comportement exact de sortie et de renouvellement. N'inventez pas une durée d'expiration et ne supposez pas que tous les modèles téléchargent de la même façon. Gérez les différences par configuration et vérification de capacité.

## Conclusion

Traitez les URL temporaires comme des identifiants de transfert qui expirent. Mettez le téléchargement en file dès la fin, transmettez vers un objet temporaire, validez le média réel puis promouvez-le vers une clé durable. Enregistrez l'URI permanente et le checksum avant de terminer la tâche, puis concevez renouvellement, relance, rétention et surveillance afin que l'expiration du lien ne supprime pas votre seule copie.

## FAQ

### Puis-je conserver l'URL de téléchargement comme emplacement final de la vidéo ?

Non. Les URL signées ou temporaires peuvent expirer, être révoquées ou changer. Stockez la clé durable et l'ID de tâche, puis demandez une nouvelle URL de transfert seulement si nécessaire.

### Le worker doit-il charger toute la vidéo en mémoire ?

Généralement non. Transmettez la réponse vers un fichier temporaire ou un upload multipart en calculant le checksum afin de ne pas épuiser la mémoire avec les gros fichiers.

### Que faut-il vérifier avant de marquer la vidéo comme sauvegardée ?

Vérifiez la réponse HTTP, la longueur disponible, la signature du fichier, le conteneur attendu, une durée supérieure à zéro, les dimensions ou le codec, le checksum et la réussite de l'écriture durable.

### Que faire si l'URL expire pendant le téléchargement ?

Conservez la tâche et l'ID distant, supprimez ou isolez l'objet incomplet, demandez une nouvelle URL si l'API le permet, puis reprenez ou recommencez selon la prise en charge vérifiée des plages.

### Combien de temps conserver les vidéos originales ?

Définissez la rétention selon les besoins du client, les obligations juridiques et de confidentialité, le coût de régénération et le budget de stockage. Utilisez des règles de cycle de vie.

### Un webhook peut-il télécharger directement la vidéo ?

Le handler doit répondre rapidement et mettre une tâche de téléchargement en file. Un worker séparé peut relancer sans danger, vérifier l'actif et éviter les pertes d'événements liées à un transfert long.
