Extension vidéo et interpolation d’images avec Gemini Omni : API et contrôle de continuité
Un flux pratique pour prolonger un clip ou relier deux images clés, puis vérifier la continuité visuelle et sonore avant livraison.
Sommaire

Vous avez déjà un court clip, mais l’action s’arrête trop tôt ; ou seulement une première et une dernière image, sans mouvement entre les deux. Avec gemini-omni-1.1-flash, vous pouvez ajouter une suite de 3 à 10 secondes ou créer la transition entre deux images limites ; à la fin de ce guide, vous saurez quel mode choisir, comment appeler l’API et comment décider si le résultat est livrable.
Choisissez l’extension en fin de clip pour conserver le mouvement, la caméra et le son d’une vidéo existante ; choisissez l’interpolation première/dernière image lorsque le début et la fin sont fixés et que seul le milieu manque ; recevoir un MP4 termine la génération, pas le contrôle du sujet, du mouvement, du raccord et du son.
Faut-il prolonger le clip ou interpoler deux images ?
Si vous disposez d’une vidéo source, commencez par l’extension ; si la sortie doit atteindre une image finale précise, commencez par l’interpolation. L’extension n’utilise pas cette image comme limite stricte, donc un mauvais choix peut ajouter un cycle de génération et de contrôle.
| Travail | Entrée | Usage adapté | Continuité à examiner en priorité |
|---|---|---|---|
| Extension en fin de clip | Une vidéo, plus éventuellement des images de référence | Poursuivre une action, un mouvement de caméra ou une scène | Pose, vitesse, direction caméra, lumière et son au raccord |
| Interpolation début/fin | Première image, dernière image et description | Compléter le mouvement entre deux états définis | Identité, espace, trajectoire et arrivée sur l’image cible |
L’extension d’une vidéo téléversée convient aux ajouts courts : le guide officiel décrit une suite de 3 à 10 secondes, et le guide des prompts documente aussi des étapes de 10 secondes jusqu’à 40 secondes au total. Le clip envoyé doit durer 10 secondes ou moins et l’ajout se fait uniquement à la fin ; utilisez un logiciel de montage classique pour insérer un plan au début ou au milieu.
Décidez ces quatre points avant l’appel API
Fixez le modèle, la sortie, le comportement des coupes et les originaux servant à la comparaison avant de générer. Une décision manquante peut vous obliger à relancer le travail ou vous empêcher de savoir si une variation au raccord vient du modèle ou de la source.
Utilisez le model ID GA
Utilisez le model ID GA gemini-omni-1.1-flash. Il est devenu généralement disponible le 27 août 2026 ; l’ancien endpoint gemini-omni-flash-preview doit être retiré le 30 septembre 2026.
Validez d’abord la continuité en 720p
Pour le premier essai, utilisez la valeur par défaut 720p afin de séparer les défauts de continuité de la livraison haute résolution. Le champ resolution de response_format accepte 360p, 720p, 1080p et 4k ; la documentation présente 1080p et 4k comme des sorties mises à l’échelle, avec 16:9 par défaut et 9:16 sur demande. Pour un résultat supérieur à 4 Mo, surtout au-delà de 720p, utilisez delivery="uri", attendez que le fichier soit actif, puis téléchargez-le.
Choisissez entre plan continu et coupe voulue
Choisissez entre un plan continu et une coupe voulue. Dans un prompt d’extension, 0s désigne le début de la nouvelle portion, pas celui du clip d’origine. Demandez « un seul plan continu » et « aucune coupe » si l’action ne doit pas être interrompue. Si une coupe est prévue, indiquez son instant dans l’extension.
Conservez le clip source et les images limites
Conservez le clip source et les deux images limites. Le guide précise qu’Omni utilise les dix dernières secondes comme contexte et peut modifier certains derniers frames pour créer le raccord. Comparer l’original et la sortie fait donc partie du contrôle de continuité.
Vous avez un clip source ? Prolongez-le par la fin
Utilisez l’extension lorsque vous avez déjà une vidéo et souhaitez poursuivre quelques secondes l’action, le mouvement de caméra ou la scène. Commencez par une requête minimale en 720p, puis resserrez les contraintes sur le sujet, le mouvement, la caméra et le son.
Lancez d’abord une requête minimale en 720p
L’exemple Python téléverse le clip avec Files API, attend la fin du traitement, puis passe l’URI et les instructions à interactions.create. Il reste en 720p pour corriger la continuité avant de traiter la livraison du fichier haute résolution.
import base64
import time
from google import genai
client = genai.Client()
video_file = client.files.upload(file="my_video.mp4")
while video_file.state == "PROCESSING":
time.sleep(10)
video_file = client.files.get(name=video_file.name)
if video_file.state == "FAILED":
raise ValueError(video_file.state)
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "video", "uri": video_file.uri},
{
"type": "text",
"text": (
"Poursuis la scène dans un seul plan continu. "
"Conserve le même sujet, la tenue, la direction de caméra, l’éclairage et la vitesse du mouvement. Sans coupe ni nouveau dialogue."
),
},
],
response_format={"type": "video", "resolution": "720p"},
)
with open("extended.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
Écrivez des conditions observables dans le prompt
Ne vous contentez pas de « poursuivre la scène ». Décrivez au moins cinq dimensions observables : ce qui doit rester identique chez le sujet, l’évolution de l’action, le mouvement de caméra, les changements autorisés de lumière ou d’environnement, et l’autorisation d’une coupe ou d’un nouveau son. « La main droite continue de monter à la même vitesse » est vérifiable ; « rendre naturel » ne l’est pas.
Définissez task seulement si le prompt choisit le mauvais mode
Si le prompt ne déclenche pas le bon mode, ajoutez {"video_config": {"task": "extend"}} sous generation_config. Le guide recommande d’abord le prompt, car task impose des contraintes plus strictes. Pour une vidéo générée au tour précédent, previous_interaction_id permet de continuer sans nouvel envoi. L’état doit être conservé : un résultat créé avec store=false ne pourra pas être édité ensuite via cet ID.
Changez de plan si les limites de dialogue ou de région s’appliquent
Des limites concernent la parole et les régions. Une vidéo téléversée dans laquelle quelqu’un parle ne peut pas actuellement être prolongée avec un dialogue supplémentaire ; une suite silencieuse ou sans nouvelle réplique reste possible. La parole est prise en charge lors d’une extension multi-tour d’une vidéo générée par le modèle via previous_interaction_id. L’édition et l’extension de vidéos téléversées ne sont pas disponibles dans l’EEE, en Suisse et au Royaume-Uni, contrairement à l’extension de vidéos générées par le modèle dans les régions disponibles.
Vous n’avez que les images limites ? Générez le mouvement intermédiaire
Utilisez l’interpolation lorsque le début et la fin sont clairs, mais que le mouvement intermédiaire manque. Envoyez les deux images dans l’ordre et décrivez comment le sujet, la caméra et l’environnement passent du premier état au dernier.
Envoyez d’abord les deux images limites
Ce mode convient quand les états initial et final sont clairs, mais que le mouvement manque. Placez les deux images dans l’ordre dans input, puis décrivez le trajet du sujet, de la caméra et de l’environnement. L’exemple complet encode des JPEG locaux en Base64 et demande 720p.
import base64
from pathlib import Path
from google import genai
client = genai.Client()
first_frame_b64 = base64.b64encode(Path("first.jpg").read_bytes()).decode()
last_frame_b64 = base64.b64encode(Path("last.jpg").read_bytes()).decode()
interaction = client.interactions.create(
model="gemini-omni-1.1-flash",
input=[
{"type": "image", "data": first_frame_b64, "mime_type": "image/jpeg"},
{"type": "image", "data": last_frame_b64, "mime_type": "image/jpeg"},
{
"type": "text",
"text": (
"Crée une transition naturelle de la première à la dernière image. "
"Préserve l’identité du sujet et la direction de caméra, garde une trajectoire continue et évite les coupes brusques."
),
},
],
response_format={"type": "video", "resolution": "720p"},
)
with open("interpolation.mp4", "wb") as f:
f.write(base64.b64decode(interaction.output_video.data))
Utilisez image_to_video seulement si le mode reste incorrect
Après avoir envoyé les images dans l’ordre, indiquez clairement que la première est le début et la seconde la fin. Si le mode reste incorrect, ajoutez image_to_video comme valeur de task ; il complète la description du sujet, de la caméra et du mouvement, sans la remplacer.
Plus l’écart est grand, plus l’ordre des changements doit être précis
Des images limites compatibles facilitent la spécification. Conservez autant que possible l’identité, le ratio, l’axe caméra et la disposition spatiale. Si les différences sont fortes, ordonnez les transformations : le sujet se tourne d’abord, la caméra se déplace ensuite, puis la lumière change. C’est une méthode de production, pas une garantie ; la sortie doit être examinée.
Le résultat est-il livrable ? Contrôlez raccord, sujet, mouvement et son
Le critère n’est pas que le résultat « ressemble assez », mais que chaque défaut puisse être montré et transformé en instruction pour la génération suivante. Regardez une fois à vitesse normale, inspectez ensuite le raccord au ralenti ou image par image, puis écoutez le son séparément.
| Dimension | Points à contrôler | Formulation utile pour une reprise |
|---|---|---|
| Sujet | Visage, cheveux, vêtements, accessoires, proportions, mains et objets | « Garde la couleur du manteau et l’objet dans la main droite. » |
| Mouvement | Direction, vitesse, équilibre, contacts, regard et trajectoire caméra | « Poursuis le pas vers la droite sans accélérer ni inverser. » |
| Montage et image | Saut, exposition, température, profondeur, perspective et géométrie du fond | « Garde le même axe et la même focale ; ne coupe pas. » |
| Son | Ambiance, rythme, dialogue, réverbération, volume, clics et bruit nouveau | « Poursuis l’ambiance, sans dialogue ajouté ni changement de rythme. » |
Pour l’extension, contrôlez le raccord ; pour l’interpolation, les deux extrémités
Pour une extension, comparez environ la dernière seconde de la source à la première seconde de la suite et vérifiez si les frames de fin d’origine ont été modifiés. Pour une interpolation, contrôlez le trajet, mais aussi que le début correspond bien à la première image et que la fin atteint la seconde, au lieu d’en reprendre seulement le style.
Resserrez une seule variable par reprise
À chaque reprise, resserrez une variable majeure. Corrigez d’abord l’identité, puis le mouvement, ensuite la caméra et le son. Il devient plus facile d’attribuer l’effet d’une instruction. Préférez « la manche gauche change de couleur au raccord » à « rends-le plus cinématographique ».
Ne forcez pas cet endpoint sur des tâches inadaptées
Cet endpoint n’est pas un monteur en un appel lorsque vous devez insérer un plan au milieu d’un programme long, poursuivre un dialogue existant ou raisonner sur plusieurs clips source. Si une limite ci-dessous touche votre projet, découpez-le en plans ou passez d’abord à un flux de montage classique.
- Un clip téléversé ne peut être prolongé qu’à la fin et doit durer 10 secondes ou moins.
- Aucun dialogue supplémentaire ne peut être ajouté à un clip téléversé où quelqu’un parle ; l’édition de voix n’est pas prise en charge.
- Les références audio ne peuvent pas être envoyées ; le son d’une référence vidéo est ignoré.
- Trois références vidéo au maximum, de trois secondes chacune, sont acceptées ; le raisonnement entre plusieurs vidéos n’est pas pris en charge.
- Les instructions système,
temperature,top_p, stop sequences et un champ negative prompt séparé ne sont pas pris en charge. Placez les interdictions dans le prompt normal. - Chaque vidéo générée contient un SynthID invisible, et entrées et sorties sont soumises aux filtres de sécurité.
- La documentation annonce une prise en charge complète de l’anglais ; les autres langues n’ont pas été évaluées et peuvent varier.
La solution pratique consiste à générer séparément de courts plans, puis à les monter et les mixer dans un logiciel classique. C’est généralement plus rapide que de demander plusieurs fois à une extension de fin de réaliser une insertion centrale, une suite de dialogue ou un raisonnement multi-clips.
Passez cette liste avant la livraison
Une réponse API réussie n’est pas une validation qualité. Avant de livrer, confirmez que :
- vous avez conservé la vidéo d’entrée, le résultat et les deux images limites ;
- vous avez enregistré le model ID, la résolution et le prompt complet ;
- vous avez inspecté le raccord image par image et vérifié si les dernières images de la source ont changé ;
- vous avez confirmé que l’interpolation commence sur la première image et atteint réellement la seconde ;
- vous avez écouté le son séparément pour détecter ruptures, clics ou nouveau bruit ;
- vous avez vérifié région, durée d’entrée, dialogue et limites des références.
Si un point reste inexpliqué, reprenez le résultat au lieu de l’accepter sur le seul statut de l’API.