Skill Gemini Omni Flash
Ce skill utilise le modèle Gemini Omni Flash (gemini-omni-flash-preview) pour effectuer la génération de vidéo à partir de texte, la génération de vidéo à partir d'image et l'édition vidéo.
[!WARNING] Restrictions régionales importantes : Le téléchargement de vidéos pour les édits vidéo n'est PAS disponible dans l'EEA, la Suisse, le Royaume-Uni et certains États américains. Si un edit vidéo-vers-vidéo se termine rapidement avec des sorties vides (
total_output_tokens: 0ou aucun contenu vidéo), cela est probablement dû à cette restriction.
Capacités principales
- Édition et refinement vidéo : Édition de vidéos existantes (durée maximale 10 secondes), application de modifications stylistiques ou réalisation d'inpainting/outpainting.
- Texte vers vidéo : Génération de vidéos à partir d'une invite textuelle.
- Première image vers vidéo : Génération de vidéos à partir d'une seule image d'entrée.
- Génération avec référence d'image : Utilisation de références de style, caractère ou objet provenant d'images pour guider la génération vidéo.
Flux de travail
-
Analyser la requête : Déterminer la tâche cible (par exemple, première-image-vers-vidéo, édition guidée par référence) et identifier les assets médias d'entrée.
-
Exécuter les scripts SDK :
- Exécuter directement l'utilitaire approprié (
scripts/video/generate_video.pyouscripts/upload_file.py). - Configurer les paramètres comme
--aspect-ratio(par exemple16:9,9:16) et--duration(tout entier entre3et10secondes, par exemple3,5,10).
- Exécuter directement l'utilitaire approprié (
-
Récupérer et traiter la sortie : Les sorties sont enregistrées dans le système de fichiers local (par exemple
media/). Signaler le chemin du média complété à l'utilisateur.
Documentation de référence
- Interactions API : Toutes les opérations et la gestion d'état pour le modèle Gemini Omni Flash (
gemini-omni-flash-preview) sont gérées via l'Interactions API. - Files API : Les fichiers médias d'entrée (tels que les images et vidéos de référence) doivent être téléchargés via l'Files API en premier lieu avant d'être référencés dans les générations. L'URI du fichier téléchargé et le type MIME sont ensuite inclus dans le tableau des parties d'entrée de
interactions.create. - Référence de Skill Interactions API : Directives à l'échelle de la plateforme, spécifications du modèle actuel et règles d'utilisation du SDK pour l'Interactions API.
Dépendances et prérequis
- Python SDK (
google-genai) : Nécessitegoogle-genai >= 2.10.0(Python) pour supporter le nouvel attribut clientinteractions. Installer ou mettre à jour en utilisant :pip install -U google-genai - Runtime Python : Nécessite Python >= 3.10 (pour la compatibilité avec les types et méthodes modernes du SDK
google-genai). - ffmpeg & ffprobe :
prep_video.py,inspect_video.pyetgenerate_video.py(lors de la suppression audio via--strip-audio) nécessitent les binairesffmpegetffprobeinstallés et disponibles dans lePATHde votre système.
Scripts disponibles
Utilisez les scripts Python suivants pour télécharger des médias avec la Files API, préparer des vidéos d'entrée avec ffmpeg et générer des sorties vidéo en utilisant l'Interactions API.
-
upload_file.py : Télécharge les médias locaux (images et vidéos) vers la Files API et interroge jusqu'à
ACTIVE. Si vous téléchargez une vidéo plus grande que 25 Mo, il affiche un avertissement/conseil informatif soulignant que Gemini Omni Flash est optimisé pour l'édition de vidéos de 10 secondes à 720p/24fps, et recommande de pré-traiter d'abord avecprep_video.pypour accélérer le téléchargement../scripts/upload_file.py path/to/image.png -
generate_video.py : Effectue la génération vidéo de bout en bout et télécharge la vidéo de sortie. Il détecte et télécharge les références de médias locaux (images ou vidéos) avant d'appeler l'Interactions API. Les grands assets vidéo (>25 Mo) déclencheront des recommandations de pré-traitement informatives sans bloquer le téléchargement.
-
Texte vers vidéo :
./scripts/video/generate_video.py "A close-up of a cat drinking tea" --output media/cat_tea.mp4 -
Image vers vidéo (première image et référence) :
./scripts/video/generate_video.py "The waves crash against the shore." --image reference.png --output media/waves.mp4 -
Interpolation vidéo :
Fournissez exactement deux images comme images clés pour générer une vidéo de transition entre elles :
./scripts/video/generate_video.py "A smooth timelapse from sunrise to sunset" --image start.png --image end.png --output media/interpolation.mp4 -
Édition vidéo (conserver l'audio original) :
./scripts/video/generate_video.py "Transform the style to Japanese anime" --video input.mp4 --output media/anime_style.mp4 -
Édition vidéo (régénérer tout l'audio à partir de zéro) :
./scripts/video/generate_video.py "Transform the style to Japanese anime" --video input.mp4 --strip-audio --output media/anime_style_new_audio.mp4 -
Édition vidéo tour par tour (éditer l'interaction précédente) :
Éditer une génération vidéo antérieure sans rétélécharger les assets en passant l'ID d'interaction :
./scripts/video/generate_video.py "Change the setting to a snowy winter wonderland." --previous-interaction-id "abc123xyz..." --output media/winter_wonderland.mp4 -
Exécution batch parallèle (fichier d'invites) : Exécuter plusieurs invites à partir d'un fichier texte ligne par ligne en parallèle :
./scripts/video/generate_video.py --prompts-file prompts.txt --concurrency 3 -
Exécution batch parallèle (config JSON) : Exécuter entièrement des tâches de génération et d'édition distinctes et configurées en parallèle :
./scripts/video/generate_video.py --batch jobs.json --concurrency 3Exemple
jobs.json:[ { "prompt": "Transform the style to Japanese anime.", "video": "input.mp4", "output": "media/anime_style.mp4", "strip_audio": false, "aspect_ratio": "16:9" }, { "prompt": "A smooth timelapse from sunrise to sunset.", "image": ["start.png", "end.png"], "output": "media/interpolation.mp4" } ]
-
-
inspect_video.py : Inspecte un fichier vidéo local (en utilisant
ffprobe) pour vérifier sa durée, résolution, fréquence d'images (FPS), présence de flux audio et détails de format../scripts/video/inspect_video.py media/output.mp4-
Pour obtenir un résumé JSON structuré pré-analysé :
./scripts/video/inspect_video.py media/output.mp4 --json -
Pour obtenir le vidage JSON brut complet et non modifié de
ffprobe:./scripts/video/inspect_video.py media/output.mp4 --raw
-
-
prep_video.py : Normalise, découpe et formate tout fichier vidéo pour s'adapter aux limites standard de génération et d'édition de Gemini Omni Flash. Il gère la découpe basée sur timecode, la conversion optionnelle de fréquence d'images et la mise à l'échelle proportionnelle de grandes vidéos (max 1280x720 pour paysage, 720x1280 pour portrait) pour optimiser les temps de téléchargement sans étirer. Si la vidéo dure plus de 10 secondes et le script s'exécute de manière interactive (dans un TTY), il invite l'utilisateur à sélectionner les 10 premières secondes, les 10 dernières secondes ou à entrer un timecode personnalisé (par défaut les 10 premières secondes).
- Découper les 10 premières secondes (par défaut) :
./scripts/video/prep_video.py path/to/source.mp4ou spécifiez explicitement le début et la durée :
./scripts/video/prep_video.py path/to/source.mp4 --start 0 --duration 10-
Découper les 10 dernières secondes (calcule automatiquement le point de départ en fonction de la longueur source) :
./scripts/video/prep_video.py path/to/source.mp4 --start last -
Découper 10 secondes à partir d'un timecode spécifique (MM:SS ou HH:MM:SS) :
./scripts/video/prep_video.py path/to/source.mp4 --start 00:03 --output media/custom.mp4 -
Fréquence d'images et résolution personnalisées :
./scripts/video/prep_video.py path/to/source.mp4 --fps 30 --resolution 1920x1080 -
Supprimer l'audio pour la régénération audio :
./scripts/video/prep_video.py path/to/source.mp4 --strip-audio --output media/video_with_no_audio.mp4
Utiliser des balises dans les invites pour définir les rôles d'image
Vous pouvez utiliser des balises dans votre invite pour clarifier si chaque média téléchargé est une image initiale ou une référence.
1. Balises simples (recommandé)
Pour les cas simples où les rôles d'image sont clairs à partir de l'invite, vous pouvez lier les images aux rôles directement :
<FIRST_FRAME>: Utilisez l'image comme image de départ de la vidéo, par exemple :<FIRST_FRAME> a woman is walking<IMAGE_REF_N>: Utilisez l'image comme référence, par exemple :in the style of <IMAGE_REF_0> a woman <IMAGE_REF_1> is walking(combine une référence de style de la première image et une référence de sujet de la deuxième image). Les références d'images commencent à 0.
Un exemple avec 6 images de référence :
[0-3s] A studio fashion sequence. Starting with woman <IMAGE_REF_0>, she is holding <IMAGE_REF_1>
[3-6s] Then we see the man <IMAGE_REF_2> holding <IMAGE_REF_3>
[6-10s] And finally another woman <IMAGE_REF_4> who is holding <IMAGE_REF_5> while walking.
2. Déclarer explicitement les sources et références
Pour les cas plus complexes avec plusieurs images et plusieurs rôles, vous pouvez utiliser des balises de préfixe explicites associées à des suffixes d'instruction en langage naturel.
-
Déclaration des sources et images de référence :
[# Sources <FIRST_FRAME>@Image1]utilisera la première image comme image de départ.[# References <IMAGE_REF_0>@Image1]utilisera la première image comme référence.[# References <IMAGE_REF_1>@Image2]utilisera la deuxième image comme référence.[# References <IMAGE_REF_0>@Image1 <IMAGE_REF_1>@Image2]utilisera les deux images comme références.[# Sources <FIRST_FRAME>@Image1] [# References <IMAGE_REF_0>@Image2]utilisera la première image comme image de départ et la deuxième image comme référence.
-
Instructions de guidage : Ajoutez des instructions de guidage à la fin de votre invite :
- Pour l'image de départ :
"Use the given image as the starting frame." - Pour les images de référence :
"Use the given image(s) as references for video generation. The images should not be used as literal initial frames."
- Pour l'image de départ :
-
Exemple d'invite expansée :
[# Sources <FIRST_FRAME>@Image1] [# References <IMAGE_REF_0>@Image2] a woman <IMAGE_REF_0> is walking. Use Image1 as the starting frame. Use Image2 as a reference for the video generation.
Gestion de l'audio dans l'édition vidéo
Lors de l'édition d'une vidéo source contenant de l'audio, vous devez choisir entre conserver l'audio original ou régénérer tout l'audio à partir de zéro.
-
Conserver l'audio original : Par défaut, Gemini Omni Flash préserve la couche audio existante (bien qu'il puisse la modifier ou l'adapter légèrement pendant la génération). Utilisez ceci quand la musique de fond, le dialogue ou les effets sonores originaux sont souhaités.
-
Régénérer tout l'audio à partir de zéro : Si vous voulez que Gemini Omni Flash crée une toute nouvelle couche audio adaptée au nouveau style visuel ou à l'invite, vous devez télécharger la vidéo avec son flux audio supprimé. Si un flux audio est présent, Gemini Omni Flash tentera de le préserver/modifier au lieu de repartir de zéro.
- Utilisez
--strip-audio(ou-a) lors du pré-traitement avecscripts/video/prep_video.pyou lors de l'exécution descripts/video/generate_video.py. - Cela force Gemini Omni Flash à effectuer une génération audio complète.
- Utilisez
Prompting Gemini Omni Flash
Scène unique
Par défaut, Gemini Omni Flash essaiera de créer une vidéo avec plusieurs shots différents. Il tentera de concevoir une narration intéressante basée sur l'invite.
Si vous avez besoin que la vidéo de sortie contienne une scène unique, vous devez demander cela :
- Dans une scène ininterrompue unique
- Dans un plan continu unique
- Pas de coupures de scène
Par exemple :
Continuous, unbroken handheld shot of a fluffy tabby cat sitting on a sunny windowsill, looking out into a leafy garden. The cat's tail twitches slowly, and its ears rotate slightly toward ambient noises. Sunbeams illuminate dust motes in the air. Sound design: Gentle breeze, distant bird chirps, quiet mechanical purring. No dialogue.
Suppression d'éléments indésirables
Si les générations contiennent des choses que vous ne voulez pas, vous pouvez inclure de simples négations pour les éviter :
- No dialogue
- No embellishments
- No extra sound effects
Invites pour l'édition
Les invites simples fonctionnent mieux pour l'édition. Les invites trop descriptives peuvent entraîner des modifications involontaires.
Par exemple :
- Make this video anime
- Make the phone invisible
- Put a fashionable hat on this person
- Change the lighting to be more dramatic
- Change the text on the sign to say "Gemini Omni Flash"
- Add a cat that jumps onto his lap, he begins to pet it
Lors de l'édition d'un aspect spécifique de la vidéo, cela peut aider à inclure : « Keep everything else the same ».
Prompting l'audio
Par défaut, le modèle essaiera de générer une piste audio appropriée pour une vidéo. Ce n'est pas toujours ce que vous voulez. Vous pouvez utiliser votre invite pour décrire le type d'audio que vous voulez. C'est particulièrement important si vous voulez de la musique dans votre vidéo :
- Include calm background music
- The video has a high energy techno beat
- The audio is a low tinny radio broadcast in the background, playing a song
- Audio design: [a description of the audio you want]
Quand les choses doivent se produire
Vous pouvez demander que les choses se produisent à des moments spécifiques de la vidéo, il n'y a pas de syntaxe précise nécessaire et vous pouvez utiliser le langage naturel. C'est particulièrement utile pour créer vos propres coupures de scène, rythme ou séquences rapides.
Exemples simples :
- after 3 seconds, a woman enters the scene
- at 5s the chorus starts in the background audio
- every 2s cut to a new frame
- in a rapid fire sequence, every half a second (12 frames at 24fps) change the scene to a new location
Vous pouvez également utiliser une syntaxe de timecode :
[0-3s] A person is walking
[3-6s] They stop and turn around
[6-10s] They start running
Prompting méta
Au lieu de spécifier tout directement dans une invite, vous pouvez demander au modèle de faire attention à certaines choses. Vous pouvez donner à Gemini Omni Flash ces sortes d'invites littéralement :
- Consider micro-detail, expression and timing to create a very rich, detailed but entirely natural scene.
- Be extremely detailed in your descriptions of characters and environments. Apply costume design principles to characters. Be very specific about the people, items and objects in the scene.
- Include plenty of appropriate detail in the background elements to make the scene feel realistic and natural.
- Make a rapid fire video that shows a different rare [thing] every 1s, upbeat music, include text to label the thing.
Le texte dans les vidéos fonctionne vraiment bien
Contrairement aux modèles vidéo précédents, le texte dans les vidéos Gemini Omni Flash fonctionne vraiment bien. Vous pouvez inclure des quantités décentes de texte dans votre vidéo et il sera rendu de manière correcte et lisible. S'il y aura du texte se produisant naturellement dans votre vidéo, même dans les éléments d'arrière-plan, cela peut aider à définir ce qu'il devrait dire.
Par exemple :
- One word on the screen at a time: "did, you, know, that, Omni, can, do, awesome, text?" Each word appears for 1s with a different animated style. No dialogue.
- There is a street sign that says: "This is an AI generation by Omni", there is a storefront that says: "All you need AI", there's a car with the number plate: "OMN111"