Structure JSON et règles des champs
1. Structure de premier niveau
La forme JSON complète au niveau supérieur est :
{
"meta": {},
"assets": {},
"tracks": []
}Règles :
metaest requistracksest requis et doit contenir au moins un trackassetsest optionnel
Non pris en charge :
- Ancien
videoau niveau supérieur - Ancien
audioau niveau supérieur
2. meta
interface Meta {
version: string;
title?: string;
description?: string;
author?: string;
createdAt?: string;
tags?: string[];
width: number;
height: number;
fps: number;
background?: string | "transparent" | Gradient;
}version
- Type :
string - Requis : oui
- Rôle : marqueur de version du schéma
- Valeur recommandée :
"2.0.0"
title
- Type :
string - Requis : non
- Rôle : métadonnées du titre vidéo
description
- Type :
string - Requis : non
- Rôle : métadonnées de description vidéo
author
- Type :
string - Requis : non
- Rôle : métadonnées d'auteur
createdAt
- Type :
string - Requis : non
- Rôle : métadonnées de date de création
tags
- Type :
string[] - Requis : non
- Rôle : métadonnées de balisage
width
- Type :
number - Requis : oui
- Contrainte : entier positif
- Rôle : largeur du canvas
height
- Type :
number - Requis : oui
- Contrainte : entier positif
- Rôle : hauteur du canvas
fps
- Type :
number - Requis : oui
- Contrainte : entier positif
- Rôle : fréquence d'images
background
- Type :
string | "transparent" | Gradient - Requis : non
- Valeur par défaut :
"#000000" - Rôle : arrière-plan global
Forme de Gradient :
interface Gradient {
type: "linear" | "radial" | "conic";
angle?: number;
stops: Array<{
offset: number;
color: string;
}>;
}3. assets
interface Assets {
fonts?: FontAsset[];
images?: ImageAsset[];
videos?: VideoAsset[];
audios?: AudioAsset[];
subtitles?: SubtitleAsset[];
}fonts
interface FontAsset {
id: string;
src: string;
family: string;
}Statut actuel à l'exécution :
- Il peut apparaître dans le JSON
- Le runtime ne télécharge ni n'enregistre automatiquement les polices
- Ne le considérez pas comme un système complet de chargement des polices
images
interface ImageAsset {
id: string;
src: string;
}videos
interface VideoAsset {
id: string;
src: string;
}audios
interface AudioAsset {
id: string;
src: string;
}subtitles
interface SubtitleAsset {
id: string;
words: SubtitleWord[];
}Utilisation de $ref
Pools de ressources qui prennent en charge $ref :
imagesvideosaudiossubtitles
Exemple :
{
"src": { "$ref": "video-hero" }
}Ou :
{
"words": { "$ref": "subtitle-main" }
}4. tracks
interface Track {
id?: string;
clips: Clip[];
}id
- Type :
string - Requis : non
- Rôle : identifiant du track
clips
- Type :
Clip[] - Requis : oui
- Contrainte : au moins un clip
5. Forme partagée de Clip
interface BaseClip {
id?: string;
type: ClipType;
start: number;
duration: number;
transform?: Transform;
zIndex?: number;
opacity?: number;
style?: Style;
animations?: Animation[];
keyframes?: Keyframe[];
transition?: Transition;
}Champs de base partagés :
id
- Type :
string - Requis : non
- Rôle : identifiant du clip
type
- Type :
ClipType - Requis : oui
Actuellement pris en charge :
videoimagetextrectcirclepolygonaudiosubtitlelayouttemplate
start
- Type :
number - Requis : oui
- Unité : secondes
- Rôle : heure de début du clip
duration
- Type :
number - Requis : oui
- Unité : secondes
- Rôle : durée du clip
transform
- Type :
Transform - Requis : non
zIndex
- Type :
number - Requis : non
- Valeur par défaut :
0
opacity
- Type :
number - Requis : non
- Valeur par défaut :
1 - Rôle : raccourci d'opacité pour les éléments visibles
- Règle de compatibilité :
style.opacitya priorité suropacityau niveau supérieur
style
- Type :
Style - Requis : non
animations
- Type :
Animation[] - Requis : non
keyframes
- Type :
Keyframe[] - Requis : non
transition
- Type :
Transition - Requis : non
6. Règles sur les coordonnées et les pourcentages
Les coordonnées en pourcentage sont basées sur le système de coordonnées centré de Revideo, et non sur une origine en haut à gauche comme dans le DOM.
Exemples :
x: "50%"signifie centré horizontalementy: "50%"signifie centré verticalementx: "0%"signifie tout à gauchex: "100%"signifie tout à droitey: "0%"signifie en hauty: "100%"signifie en bas
7. JSON valide minimal
{
"meta": {
"version": "2.0.0",
"width": 1920,
"height": 1080,
"fps": 30,
"background": "#000000"
},
"tracks": [
{
"clips": [
{
"type": "text",
"start": 0,
"duration": 3,
"text": "Hello, world",
"transform": {
"x": "50%",
"y": "50%"
},
"style": {
"fontSize": 72,
"fill": "#ffffff",
"textAlign": "center"
}
}
]
}
]
}8. Remarque pour les intégrations publiques
Pour les intégrations externes, utilisez le flux documenté dans API et utilisation :
- Soumettez votre schéma via
POST /api/preview - Envoyez le JSON complet du schéma comme corps de requête
- L'absence de
metaoutracksau niveau supérieur doit toujours être traitée comme une entrée invalide - Un mauvais nom de champ dans un clip ne provoque pas toujours une erreur dès la requête
- Certaines erreurs ne deviennent visibles qu'au moment de l'aperçu, de la lecture ou du rendu
Guide JSON vers vidéo
Un guide pratique des workflows JSON vers vidéo, de la conception du schéma et de la génération d'aperçus jusqu'aux tâches de rendu, aux assets et aux webhooks.
Index des clips et des éléments
Index des types de clips, des règles communes et des liens vers les pages de référence par élément