Extraire les images d’une vidéo
Extraire les images d’une vidéo, c’est en tirer les photogrammes sous forme de fichiers image distincts : chaque instant filmé devient une photo que l’on trie, retouche ou réutilise. Vous choisissez de récupérer toutes les images ou un rythme plus espacé, par exemple une image par seconde.
Exécuter en ligne
Exécutez cette tâche sur nos serveurs, avec votre compte. Les outils gratuits tournent dans votre navigateur ; celui-ci est facturé sur votre solde KIT au prix affiché ci-dessus.
Ce qu’est un photogramme
Une vidéo est une suite d’images fixes défilant vite ; les extraire revient à en obtenir chacune, ou une sur plusieurs, comme des photos. C’est utile pour trouver le meilleur arrêt sur image, alimenter une analyse image par image, constituer une planche de vignettes ou récupérer un plan précis en haute qualité. Le résultat est un lot de fichiers image, un par photogramme retenu, à télécharger ensemble.
Toutes les images, ou un rythme choisi
Extraire chaque photogramme d’une vidéo produit vite un très grand nombre de fichiers. Le plus souvent, un rythme espacé suffit : une image par seconde, ou une toutes les quelques secondes, pour couvrir la vidéo sans crouler sous les fichiers. Vous fixez ce rythme selon le besoin. Les images sortent en PNG, sans compression, ou en JPEG, plus léger, à la définition de la vidéo d’origine.
Limites et tarif
La vidéo peut atteindre 500 Mo et 60 min. Le service se paie à l’usage, en dollars US : $0.077 par requête, puis $0.0045 par minute de vidéo parcourue. Une vidéo de dix minutes revient à environ $0.12, quel que soit le nombre d’images extraites, sans abonnement. La capacité est en cours de déploiement : le prix est affiché, l’exécution ouvrira sur cette page, puis via l’API.
Cas d’usage
Le meilleur arrêt sur image
Camille Moreau extrait les images d’un plan filmé pour choisir, à tête reposée, la photo la plus nette à publier, plutôt que de multiplier les captures d’écran.
Planche de vignettes
Studio Lumen SAS tire une image par seconde d’une vidéo pour composer une planche d’aperçu et repérer d’un coup d’œil les moments forts.
Analyse image par image
Menuiserie Rousseau & Fils décompose une vidéo de contrôle qualité en photogrammes pour examiner un détail précis à l’arrêt.
Questions fréquentes
Vais-je obtenir toutes les images de la vidéo ?
Selon votre choix. Vous pouvez extraire chaque photogramme, ce qui produit beaucoup de fichiers, ou fixer un rythme espacé — une image par seconde, par exemple — pour un lot plus raisonnable.
En quel format les images sont-elles fournies ?
En PNG, sans compression pour une netteté maximale, ou en JPEG, plus léger. Les images conservent la définition de la vidéo d’origine.
Combien coûte l’extraction ?
Le tarif est de $0.077 par requête, plus $0.0045 par minute de vidéo. Dix minutes reviennent à environ $0.12, en dollars US, quel que soit le nombre d’images extraites.
Ma vidéo est-elle supprimée après l’extraction ?
Oui. Le fichier transite par nos serveurs le temps d’en tirer les images, via un transfert chiffré, puis il est effacé avec le lot d’images une fois celui-ci téléchargé.
L’outil est-il déjà utilisable ?
Pas encore : il est en cours de déploiement. Le tarif est affiché et l’exécution sera ouverte prochainement, d’abord sur cette page, puis via l’API.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/video/frames \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"audio":"https://ejemplo.com/audio.mp3"}'const res = await fetch("https://api.kit.forhosting.com/video/frames", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"audio": "https://ejemplo.com/audio.mp3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/frames",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"audio": "https://ejemplo.com/audio.mp3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/frames", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"audio":"https://ejemplo.com/audio.mp3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"audio":"https://ejemplo.com/audio.mp3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/frames", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"audio": "https://ejemplo.com/audio.mp3"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.frames",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |