API Find Moments
L'API Find Moments vous permet de décrire les moments souhaités en langage naturel — comme "réactions drôles" ou "démonstrations de produits" — et l'API trouve et extrait les clips correspondants avec horodatages, titres, descriptions et hashtags depuis des vidéos de toutes durées, y compris des contenus de plusieurs heures. Si l'export est activé, la réponse inclut également des liens de téléchargement des vidéos rendues pour chaque clip, avec un recadrage automatique optionnel qui maintient le sujet principal centré et des overlays de sous-titres animés pour des sorties plus engageantes.
Sources Vidéo Prises en Charge
L'API accepte les URLs des plateformes suivantes : YouTube, Vimeo, Dailymotion, Kick, Twitch, TikTok, Facebook, Zoom, Rumble et plus encore.
Vous pouvez également utiliser des fichiers téléversés localement. Le téléversement local nécessite un abonnement Standard ou supérieur. Consultez l'API Upload pour plus de détails.
Soumettre une Tâche Find Moments
POST https://wayinvideo-api.wayin.ai/api/v2/clips/find-moments
Corps de la Requête
Lors du rendu des clips, vous pouvez activer des fonctionnalités telles que les Sous-titres Animés, l'AI Reframe et des overlays de texte AI Hook optionnels. Avec l'AI Reframe, le système détecte le sujet principal dans le cadre, le maintient centré, optimise le recadrage selon le format choisi et sélectionne la mise en page la plus adaptée selon la structure de la scène. Ces fonctionnalités sont contrôlées par des paramètres dont les noms commencent par enable_ (voir le tableau ci-dessous).
| Paramètre | Type | Obligatoire | Défaut | Description |
|---|---|---|---|---|
video_url | string | Oui | — | L'URL de la vidéo source. Pour les fichiers téléversés localement, utilisez l'identifiant de fichier retourné par l'API Upload. |
query | string | Oui | "" | Requête en langage naturel décrivant les moments souhaités (ex. "réactions drôles", "démonstrations de produits") |
project_name | string | Non | "" | Nom de tâche personnalisé |
source_lang | string | Non | null | Langue source de la vidéo (voir Langues prises en charge). Si null, le système détecte automatiquement la langue d'origine. |
target_lang | string | Non | null | Langue cible pour le contenu de sortie, y compris les titres des clips, descriptions et sous-titres (voir Langues prises en charge). Si null, la langue de sortie correspond à source_lang. |
limit | number | Non | null | Nombre maximum de clips à retourner, classés par score de viralité du plus élevé au plus bas. Si null ou omis, tous les clips sont retournés. |
enable_export | boolean | Non | false | Voir ci-dessous. Si false, seuls les plages temporelles, titres et descriptions des clips sont retournés (sans rendu) ; si true, les clips sont rendus immédiatement et chaque clip inclut un lien d'export. Vous pouvez également exporter ultérieurement avec des styles différents via l'endpoint Ré-exporter des clips existants. |
resolution | string | Non | SD_480 | Résolution de sortie : SD_480, HD_720, FHD_1080, QHD_2K, UHD_4K. Utilisé uniquement quand enable_export est true. |
enable_caption | boolean | Non | false | Ajouter des sous-titres animés lors du rendu. Utilisé uniquement quand enable_export est true. Si true, caption_display et cc_style_tpl prennent effet ; si false, l'export n'a pas de sous-titres animés. |
caption_display | string | Non | original | Mode de sous-titres : both, original, translation. Utilisé uniquement quand enable_export et enable_caption sont tous deux true. |
cc_style_tpl | string | Non | temp-7 | ID du modèle de style de sous-titres (voir Styles de sous-titres). Utilisé uniquement quand enable_export et enable_caption sont tous deux true. |
enable_ai_hook | boolean | Non | false | Ajouter un texte d'accroche généré automatiquement au début ou à la fin de chaque clip rendu. Utilisé uniquement quand enable_export est true. Si true, ai_hook_script_style et ai_hook_position prennent effet ; si false, aucun AI Hook n'est ajouté. |
ai_hook_script_style | string | Non | serious | Style du texte d'accroche généré. Valeurs autorisées : serious, casual, informative, conversational, humorous, parody, inspirational, dramatic, empathetic, persuasive, neutral, excited, calm. Utilisé uniquement quand enable_export et enable_ai_hook sont tous deux true. |
ai_hook_position | string | Non | beginning | Position du texte d'accroche généré. Valeurs autorisées : beginning, end. Utilisé uniquement quand enable_export et enable_ai_hook sont tous deux true. |
enable_ai_reframe | boolean | Non | false | Activer l'AI Reframe. Utilisé uniquement quand enable_export est true. Si true, ratio est obligatoire ; si false, la vidéo est exportée avec son format d'origine inchangé. |
ratio | string | Oui si enable_ai_reframe est true | — | Format d'image : RATIO_9_16, RATIO_1_1, RATIO_4_5, RATIO_16_9. Utilisé uniquement quand enable_export est true, et obligatoire quand enable_ai_reframe est true. |
reframe_layout | string | Non | Auto | Mise en page AI Reframe. Utilisé uniquement quand enable_export et enable_ai_reframe sont tous deux true. Par défaut Auto : le modèle choisit la meilleure mise en page pour le cadre (omettez le champ ou passez une chaîne vide pour le même comportement). Si défini sur une autre valeur autorisée pour le ratio choisi, le recadrage utilise cette mise en page fixe. Voir Valeurs de mise en page Reframe. |
Valeurs de mise en page Reframe
Les valeurs reframe_layout autorisées dépendent du ratio. Auto est toujours autorisé (par défaut) ; omettre le champ ou passer une chaîne vide a le même comportement. Passez les noms de mise en page exactement comme indiqué ci-dessous (sensible à la casse et aux espaces).
ratio | Valeurs reframe_layout autorisées |
|---|---|
RATIO_16_9 | Auto, Full, Fit, Grid 4, Split 2, Trio, PiP, OTS, Screen First |
RATIO_9_16 | Auto, Full, Fit, Grid 4, Split 2, Trio, PiP, Screen First, Gameplay A, Gameplay B |
RATIO_1_1 | Auto, Full, Fit, Grid 4, Trio |
RATIO_4_5 | Auto, Full, Fit, Grid 4, Split 2, Trio, PiP, Screen First, Gameplay A, Gameplay B |
Comportement de enable_export
- Si
enable_exportest vide oufalse, l'API retourne uniquement les plages temporelles des clips, titres, descriptions et métadonnées associées. Aucun rendu n'est effectué et il n'y a pas de liens d'export dans le résultat. Les paramètresratio,reframe_layout,resolution,caption_display,enable_caption,cc_style_tpl,enable_ai_hook,ai_hook_script_style,ai_hook_positionetenable_ai_reframen'ont aucun effet lors de la création de la tâche. Vous pouvez ultérieurement rendre les clips sélectionnés via l'endpoint Ré-exporter des clips existants. - Si
enable_exportesttrue, ces paramètres prennent effet, chaque clip est rendu immédiatement, et le résultat inclut un lien de téléchargement pour chaque clip. Le traitement peut être plus long car chaque clip est rendu.
Le corps de la requête définit enable_export à true. Les clips sont rendus ; chaque clip inclut un export_link.
Requête
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/clips/find-moments \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "x-wayinvideo-api-version: v2" \
-d '{
"video_url": "https://www.youtube.com/watch?v=example",
"query": "sample query",
"project_name": "sample project name",
"enable_export": true,
"resolution": "FHD_1080",
"enable_caption": true,
"enable_ai_reframe": true,
"ratio": "RATIO_9_16"
}'
Réponse de soumission
{
"data": {
"id": "proj_moment_789",
"name": "sample project name",
"status": "CREATED"
}
}
Le corps de la requête omet enable_export ou le définit à false. Seules les plages temporelles, titres, descriptions et tags des clips sont retournés ; pas de rendu, pas de liens d'export.
Requête
curl -X POST https://wayinvideo-api.wayin.ai/api/v2/clips/find-moments \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "x-wayinvideo-api-version: v2" \
-d '{
"video_url": "https://www.youtube.com/watch?v=example",
"query": "sample query",
"project_name": "sample project name"
}'
Réponse de soumission
{
"data": {
"id": "proj_moment_456",
"name": "sample project name",
"status": "CREATED"
}
}
| Champ | Type | Description |
|---|---|---|
id | string | Identifiant unique de la tâche |
name | string | Nom de la tâche |
status | string | CREATED, QUEUED, ONGOING, SUCCEEDED, FAILED |
Récupérer les Résultats Find Moments
Interrogez pour obtenir les résultats jusqu'à ce que status soit SUCCEEDED.
Résultats incrémentiels : Lorsque
statusestONGOING, chaque appel retourne les clips générés jusqu'à présent — vous pouvez commencer à traiter les résultats partiels immédiatement. Lorsquestatuspasse àSUCCEEDED, la réponse contient l'ensemble complet des clips.
GET https://wayinvideo-api.wayin.ai/api/v2/clips/find-moments/results/{id}
Paramètres de Chemin
| Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
id | string | Oui | L'ID de tâche retourné par l'endpoint de soumission |
Exemple de Requête
curl -X GET https://wayinvideo-api.wayin.ai/api/v2/clips/find-moments/results/proj_moment_456 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "x-wayinvideo-api-version: v2"
Lorsque la tâche a été soumise avec enable_export: true, chaque clip inclut un export_link pour la vidéo rendue :
{
"data": {
"id": "proj_moment_789",
"name": "sample project name",
"status": "SUCCEEDED",
"expire_at": 1775831883112,
"cost_usage": 120.0,
"clips": [
{
"idx": 0,
"title": "sample title",
"begin_ms": 120000,
"end_ms": 185000,
"thumbnail": "https://cdn.example.com/thumb/moment_001.jpg",
"tags": ["product", "announcement"],
"desc": "sample description",
"score": 81,
"export_link": "https://cdn.example.com/export/moment_001.mp4"
}
]
}
}
Lorsque la tâche a été soumise sans enable_export (ou avec enable_export: false), les clips n'incluent pas export_link :
{
"data": {
"id": "proj_moment_456",
"name": "sample project name",
"status": "SUCCEEDED",
"expire_at": 1775831883112,
"cost_usage": 120.0,
"clips": [
{
"idx": 0,
"title": "sample title",
"begin_ms": 120000,
"end_ms": 185000,
"thumbnail": "https://cdn.example.com/thumb/moment_001.jpg",
"tags": ["product", "announcement"],
"desc": "sample description",
"score": 81
}
]
}
}
Champs de la Réponse
| Champ | Type | Description |
|---|---|---|
id | string | Identifiant unique de la tâche |
name | string | Nom de la tâche |
status | string | CREATED, QUEUED, ONGOING, SUCCEEDED, FAILED |
error_message | string | Raison de l'erreur (présent uniquement quand status est FAILED) |
expire_at | integer | Horodatage d'expiration en millisecondes (epoch). Après cette date, la tâche expire et les résultats ne peuvent plus être récupérés via l'endpoint des résultats. La durée d'expiration dépend de votre plan d'abonnement. Consultez la page Plans d'abonnement pour plus de détails. |
cost_usage | number | Crédits API consommés pour cette requête |
clips | array | Liste d'objets clip (voir ci-dessous). Quand status est ONGOING, contient les clips générés jusqu'à présent (résultats partiels) ; quand status est SUCCEEDED, contient tous les clips (résultats finaux). |
Objet Clip
| Champ | Type | Description |
|---|---|---|
idx | integer | Index du clip (basé sur 0, classé par potentiel viral) |
title | string | Titre du clip généré par IA |
begin_ms | number | Temps de début en millisecondes |
end_ms | number | Temps de fin en millisecondes |
thumbnail | string | URL de l'image miniature |
tags | string[] | Hashtags générés par IA |
desc | string | Description générée par IA |
score | number | Score de potentiel viral (0–100, plus élevé est mieux) |
export_link | string | URL de téléchargement de la vidéo rendue (quand enable_export est true). Un nouveau lien est généré à chaque appel de l'endpoint des résultats. Chaque lien expire après 24 heures — veuillez télécharger la vidéo avant expiration. Si le lien a expiré, appelez à nouveau l'endpoint des résultats pour en obtenir un nouveau. |
Ré-exporter des Clips Existants
Si vous souhaitez rendre des clips ultérieurement ou les ré-exporter avec un style de sous-titres différent, un format d'image, un AI Hook, des overlays ou d'autres paramètres d'export, utilisez l'API Clips Export.
Pour les projets Find Moments, passez l'id de tâche retourné par POST /api/v2/clips/find-moments comme project_id dans la requête d'export.