Vidéo courte : étapes horodatées
Comment Gemini « regarde » une vidéo
Par défaut, le modèle échantillonne une image par seconde et écoute la piste audio. Une vidéo, c'est donc une suite de photos + un son : environ 100 tokens par seconde en résolution par défaut (environ 300 en haute résolution). Avec un modèle à 1 million de tokens de contexte, cela permet jusqu'à environ 3 heures de vidéo.
flowchart LR
V["tuto.mp4 (12 s)"] --> U["API Files : upload"]
U --> S{"state ?"}
S -- "PROCESSING" --> W["attendre 2 s"] --> S
S -- "ACTIVE" --> G["Gemini : 1 image/s + audio"]
S -- "FAILED" --> E["erreur explicite"]
G --> R["00:00 étape 1, 00:03 étape 2..."]
R --> D["files.delete()"]
Le code
Notre part_from() envoie toujours une vidéo par l'API Files ; uploader() attend l'état ACTIVE (voir la leçon sur les PDF). Il reste la consigne :
def decrire_video(client, video_path):
r = generer(client, [part_from(client, video_path),
"Liste les étapes montrées dans cette vidéo avec leur horodatage (MM:SS)."])
return {"texte": r.text, "tokens": tokens(r)}python multimodal.py video tuto.mp4Et le bloc final du programme garantit la suppression, même en cas d'erreur :
try:
res = ACTIONS[action](client, args[0])
finally:
nettoyer(client)| Source de la vidéo | Comment l'envoyer | Remarque |
|---|---|---|
| Fichier local | API Files | la voie la plus sûre |
| Vidéo YouTube publique | types.Part(file_data=types.FileData(file_uri="https://www.youtube.com/watch?v=...")) | fonction en préversion, quota quotidien en offre gratuite |
| Cloud Storage (Vertex AI) | URI gs://… | voir la formation Vertex AI |
Une action dure une demi-seconde entre la 4e et la 5e seconde de la vidéo. Que risque-t-on ?
Avec 1 image par seconde, un événement très bref peut tomber entre deux images. Pour les vidéos rapides, découpez-les ou augmentez la fréquence d'échantillonnage.
Notre tuto.mp4 (12 s, sans piste audio) a coûté 811 tokens d'entrée. Qu'est-ce qui l'explique le mieux ?
Le coût dépend de la durée (nombre d'images échantillonnées) et de la résolution, pas du poids du fichier. Sans audio, il n'y a pas les 32 tokens par seconde de son. La réponse, elle, compte dans les tokens de sortie.
Exercice : un chapitrage de vidéo
Vous avez une vidéo de formation interne de 20 minutes. Écrivez une consigne qui produit un chapitrage (titre + horodatage de début) et une question à choix multiple par chapitre. Estimez l'ordre de grandeur des tokens d'entrée.
Voir la solution
consigne = ("Découpe cette vidéo en 4 à 8 chapitres. Pour chacun : horodatage de début (MM:SS), "
"titre court, et une question à choix multiple (3 options, indique la bonne). "
"N'invente rien qui ne soit pas montré ou dit dans la vidéo.")
res = generer(client, [part_from(client, "formation.mp4"), consigne])Ordre de grandeur : 1 200 s × (environ 100 tokens image + 32 tokens audio) ≈ 160 000 tokens d'entrée. C'est bien sous la limite d'un modèle à 1 million de tokens, mais nettement plus cher qu'une image : testez d'abord sur un extrait de 2 minutes.
Résultat obtenu
python multimodal.py video tuto.mp4, exécution réelle du 2026-10-15 :
Voici la liste des étapes présentées dans le tutoriel avec leurs horodatages :
- 00:00 - 00:02 : 1. Débranchez l'imprimante
- 00:03 - 00:05 : 2. Ouvrez le capot avant
- 00:06 - 00:08 : 3. Retirez la feuille coincée
- 00:09 - 00:11 : 4. Refermez et rebranchez
"tokens": {"entree": 811, "sortie": 123}Les horodatages correspondent exactement au découpage de la vidéo générée (une étape toutes les 3 secondes), et le fichier a été supprimé de l'API Files à la fin.
- Je sais envoyer une vidéo par l'API Files et attendre l'état
ACTIVE - Je sais demander des horodatages au format MM:SS
- Je sais pourquoi un événement très bref peut être manqué
- Je supprime mes fichiers après usage