Communitygithub.com

Agents365-ai/video-podcast-maker

Créez des vidéos explicatives, des podcasts et des résumés animés en 4K à partir d'un sujet, avec narration automatique, TTS et musique de fond.

Qu'est-ce que video-podcast-maker ?

Ce skill transforme n'importe quel sujet en une vidéo de connaissance narrative de qualité professionnelle, au format 4K horizontal ou vertical. Il orchestre un pipeline complet : recherche du sujet, rédaction du script, synthèse vocale (TTS), composition visuelle avec Remotion et mixage audio. Il prend en charge deux moteurs TTS locaux (Edge et Azure) et intègre la vérification de la synchronisation audio-vidéo. L'utilisateur peut itérer sur une vidéo existante (modification du script, des visuels ou de la musique) sans repartir de zéro. Les formats de sortie incluent MP4 avec ou sans musique de fond, et des miniatures 16:9 et 4:3 automatiques.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Agents365-ai/video-podcast-maker/tree/HEAD/skills/video-podcast-maker

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Recommandé : Charger les bonnes pratiques Remotion

Ce skill bénéficie de remotion-best-practices (non inclus) pour la bibliothèque complète des motifs Remotion. Il est optionnel — les règles minimales sont ci-dessous si absent.

  • Pi : lisez le skill chargé à remotion-best-practices (listé dans les skills disponibles).
  • Claude Code : invoquez le skill/outil remotion-best-practices avant de continuer.

Pas installé ? Récupérez-le depuis remotion-dev/skills (docs : remotion.dev/docs/ai/skills).

Si remotion-best-practices n'est pas installé, règles minimales : chromium doit être disponible, enveloppez toujours le contenu 4K dans <Scale4K>, utilisez <TransitionSeries> avec linearTiming, et traitez l'audio comme horloge maîtresse.

Générateur de Podcast Vidéo

Pipeline automatisé pour vidéos de connaissance Bilibili horizontales en 4K à partir d'un sujet. Agent de codage + backend TTS + Remotion + FFmpeg.

Sommaire


Amorçage

Résoudre SKILL_DIR vers le répertoire contenant ce fichier SKILL.md :

  • Pi : l'agent connaît le chemin du skill depuis la liste des skills chargés — définissez SKILL_DIR sur ce répertoire avant d'exécuter les commandes.
  • Claude Code : ${CLAUDE_SKILL_DIR} est automatiquement renseigné.
SKILL_DIR="${SKILL_DIR:-${CLAUDE_SKILL_DIR}}"

# Prérequis (CLI + variables d'environnement du backend)
python3 "${SKILL_DIR}/scripts/check_prereqs.py"

Les mises à jour transitent par le CLI des skills (npx skills update video-podcast-maker -g) ; les installations par clone git direct utilisent git pull selon le README. Ce skill n'effectue aucune vérification de mise à jour.

Échecs des prérequis — voir README.md pour l'installation. La vérification est consciente du backend (résout la variable d'environnement TTS_BACKEND → user_prefs.json global.tts.backend → edge par défaut), donc seules les variables d'environnement requises par le backend actif sont validées.

Première vidéo d'un nouveau projet ? Préférez réutiliser un projet Remotion existant avec node_modules/ déjà installé — créer un nouveau projet télécharge ~2,2 Go de paquets npm plus un shell headless Chrome de 90 Mo (une fois par projet). Si l'utilisateur a un projet d'une vidéo précédente, utilisez-le. Si un nouveau projet est nécessaire, lancez npm install en arrière-plan pendant les étapes 1 à 4 (recherche du sujet et rédaction du script).

Tout le rendu va dans videos/{name}/ — chaque output.mp4, final_video.mp4 et thumbnail_*.png atterrit directement dans le répertoire par vidéo. Ne rendez jamais dans un répertoire out/ ou dist/ ; la convention --public-dir videos/{name}/ garde tout autonome.

Moteur TTS — deux backends locaux, aucun skill externe :

  • edge (par défaut) — gratuit, sans clé, via edge-tts.
  • azure — nécessite AZURE_SPEECH_KEY + AZURE_SPEECH_REGION (Microsoft Speech SDK).

Chacun synthétise en interne (scripts/tts/backends/native.py) — la prononciation (affichage → parole → retour à l'affichage pour les sous-titres) et l'application de phonèmes sont intégrées. check_prereqs.py valide les variables d'environnement du backend actif.

TTS multi-plateforme ? L'ancien skill composant ttscn qui fournissait la matrice de 9 backends n'est plus une dépendance de ce skill. Si vous souhaitez ces plateformes, installez Agents365-ai/ttsCN séparément et appelez-le directement — ce skill ne fournit que edge + azure.

Raccourci d'apprentissage du design : Si l'utilisateur fournit une vidéo/image de référence ou demande de sauvegarder/lister/supprimer des profils de style, voir references/design-learning.md au lieu d'exécuter le workflow ci-dessous.


Modes d'exécution

Détectez le mode Auto (par défaut) vs le mode Interactif au début du workflow — la table de décision Auto-par défaut et les surcharges par requête se trouvent dans references/workflow-script.md.


Régénérer une vidéo existante

Si videos/{name}/ existe déjà et que l'utilisateur itère sur une vidéo terminée ou en cours, réutilisez ce répertoire. Ne démarrez PAS un nouveau projet ou un nouveau videos/{nouveaunom}/.

Choisissez la plus petite ré-exécution pour ce qui a réellement changé :

ChangéRé-exécutionRéutilise (ne refaites pas)
Script de narration (podcast.txt)Étape 7 (TTS) → Étape 8 prévisualisation → rendu+mixagerecherche du sujet + conception des sections
Visuels uniquement (composants, disposition, couleurs)Étape 8 prévisualisation → rendu+mixageaudio (podcast_audio.wav / timing.json)
Musique de fond uniquementRe-mixage BGMoutput.mp4 (pas de nouveau rendu)
Sous-titres uniquementÉtape 10.1 finalisationoutput.mp4 / video_with_bgm.mp4

Toute ré-exécution qui modifie ce que le spectateur voit ou entend repasse par la porte de l'étape 8 : appliquez le changement, laissez le Studio se recharger à chaud, et attendez une nouvelle confirmation explicite de « rendre la 4K » — la confirmation précédente ne se reporte pas. Un changement de script décale chaque horodatage en aval, donc régénérez toujours timing.json via TTS — ne le modifiez jamais manuellement. Après toute ré-exécution, revérifiez :

python3 ${SKILL_DIR}/scripts/verify_output.py videos/{name}/

Workflow

Itération sur une vidéo terminée ? Si videos/{name}/ existe déjà, voir Régénérer une vidéo existante ci-dessus pour la ré-exécution minimale — ne commencez PAS à l'étape 1.

Au début de l'étape 1, créez une tâche par étape dans le tracker de votre agent. Marquez in_progress au début, completed à la fin. Les fichiers dans videos/{name}/ sont l'enregistrement durable — en cas d'interruption, inspectez le répertoire pour déterminer où reprendre.

#ÉtapeSortieFichier de phase
1Définir l'orientation du sujettopic_definition.mdworkflow-script.md
2Rechercher le sujettopic_research.mdworkflow-script.md
3Concevoir 5 à 7 sections(en mémoire)workflow-script.md
4Écrire le script de narrationpodcast.txtworkflow-script.md
4.5Pré-vol de prononciation (zh-CN)phonemes.jsonworkflow-script.md
5Plan des assets et résolutionassets/manifest.jsonworkflow-assets.md
6Générer les miniatures (16:9 + 4:3)thumbnail_*.pngworkflow-production.md
7Générer l'audio TTSpodcast_audio.wav, timing.jsonworkflow-production.md
8Composition Remotion + prévisualisation Studio—workflow-production.md
9Rendu 4K + mixage BGMoutput.mp4, video_with_bgm.mp4workflow-production.md
10Infos de publication + vérification de la sortiepublish_info.md, final_video.mp4workflow-publish.md
11Générer les formats verticaux (optionnel)shorts/workflow-publish.md

Arrêts obligatoires (lignes en gras ci-dessus) :

  • Étape 8 — Revue Studio. DOIT lancer npx remotion studio et attendre les retours de l'utilisateur avant de rendre. Ne rendez JAMAIS la 4K avant que l'utilisateur ne confirme explicitement (« rendre la 4K » / « rendu final »). Une réponse contenant des demandes d'ajustement n'est pas une confirmation — appliquez les modifications, laissez le Studio se recharger à chaud, et redemandez. Chaque cycle d'ajustements nécessite sa propre confirmation fraîche avant l'étape 9.
  • Étape 10 — verify_output.py. DOIT réussir avant de déclarer la vidéo terminée. Code de sortie 0 = vert ; code 2 = avertissements, mais publiable. Corrige automatiquement les omissions courantes (crée final_video.mp4 si manquant). Valide les informations de publication (titre, description, tags, chapitres) par rapport à la matrice de plateforme — générez-les aux étapes 5.5 et 10.2. Pour une sortie lisible par machine, ajoutez --format json.

Audit pré-rendu (recommandé) — avant l'étape 8 :

python3 ${SKILL_DIR}/scripts/audit_beat_sync.py <Video.tsx> <timing.json>

Signale les beats qui dérivent de plus de 1,5 s de la narration.

Mode Auto : auto-examen visuel. En mode Auto (aucun utilisateur ne regarde Studio), rendez 3 à 5 images clés avant de demander la confirmation de rendu :

npx remotion still src/remotion/index.ts <CompositionId> videos/{name}/_review_001.png --public-dir videos/{name}/ --frame=<image_milieu>

Choisissez les images à : titre principal (~10 %), un milieu de section dense, et la conclusion. Relisez les images fixes en tant qu'images et appliquez les listes de vérification de design-guide.md et visual-taste.md sur le rendu réel. Attrapez les débordements, les problèmes de contraste et de disposition avant le rendu 4K. Supprimez _review_*.png après l'examen.

Points de contrôle de validation

Après l'étapeVérification
7 (TTS)podcast_audio.wav se joue · timing.json couvre toutes les sections · SRT est en UTF-8
9 (Rendu)output.mp4 est 3840×2160 · synchronisation audio-vidéo · pas d'images noires
10 (Vérifier)verify_output.py sort 0 (ou 2 avec avertissements examinés)

Règles strictes

RègleExigence
Projet uniqueToutes les vidéos sous videos/{name}/ dans le projet Remotion de l'utilisateur. Ne créez JAMAIS un nouveau projet par vidéo.
Sortie 4K3840×2160 (ou 2160×3840 vertical), utilisez le wrapper scale(2) sur un espace de conception 1920×1080
Sync audioL'audio (podcast_audio.wav + podcast_audio.srt) est l'horloge maîtresse. timing.json DOIT être généré à partir de la sortie TTS réelle, jamais estimé manuellement. Avant le rendu, la durée de la vidéo finale doit correspondre à l'audio à ±0,5 s près. Voir Horloge maîtresse audio et synchronisation.
MiniatureDOIT générer à la fois 16:9 (1920×1080) ET 4:3 (1200×900) — voir design-guide.md
Studio avant renduDOIT lancer remotion studio pour examen. Ne rendez JAMAIS la 4K avant confirmation explicite de l'utilisateur. Un retour avec ajustement ≠ confirmation — appliquez, rechargez à chaud, redemandez.
--public-dirChaque commande Remotion utilise --public-dir videos/{name}/. Tous les fichiers de sortie (output.mp4, final_video.mp4, thumbnails) vont directement dans videos/{name}/ — jamais dans un répertoire out/ ou dist/.

Les minimums visuels (tailles de texte, largeur du contenu, zones de sécurité, sécurité d'animation) se trouvent dans references/design-guide.md. DOIT être chargé avant l'étape 8.

Horloge maîtresse audio et synchronisation

Règles d'or

  1. L'audio est l'horloge maîtresse. Chaque début de diapositive, sous-titre, chapitre et beat d'animation est dérivé de podcast_audio.wav et podcast_audio.srt.
  2. Générez le timing à partir du TTS, pas d'estimations de texte. Pipeline : podcast.txt → generate_tts.py → podcast_audio.wav + podcast_audio.srt + timing.json → composition → rendu.
  3. N'écrivez jamais timing.json manuellement avant que l'audio n'existe. Si vous avez déjà des diapositives organisées, exécutez align_timing_from_srt.py pour les ancrer au SRT réel.
  4. Compensez le chevauchement de TransitionSeries. TransitionSeries rend sum(section.duration_frames) - (N-1) * transitionFrames images. Mettez à l'échelle chaque section proportionnellement pour que la durée rendue soit égale à timing.total_frames. Ne mettez pas toutes les images de chevauchement dans la première section. Le motif corrigé se trouve dans templates/Video.tsx.

Points de contrôle de synchronisation obligatoires

QuandVérification
Après l'étape 7 (TTS)timing.json.total_duration correspond à podcast_audio.wav à ±0,5 s près
Avant le renduVideo.tsx met à l'échelle toutes les sections pour le chevauchement de transition
Après le renduLa durée de final_video.mp4 correspond à podcast_audio.wav à ±0,5 s près
Étape 10 (vérification)verify_output.py sort 0 et rapporte vert sur audio/timing

Si un point de contrôle échoue, arrêtez-vous. Ne publiez pas.

Spécifications de sortie

ParamètreHorizontal (16:9)Vertical (9:16)
Résolution3840×2160 (4K)2160×3840 (4K)
Fréquence d'images30 ips30 ips
EncodageH.264, 16 Mbit/sH.264, 16 Mbit/s
AudioAAC, 192 kbit/sAAC, 192 kbit/s
Durée1 à 15 min60 à 90 s (point fort)

Structure par vidéo

racine-du-projet/                    # Racine du projet Remotion
├── src/remotion/                    # Source Remotion (Root.tsx, compositions, index.ts)
├── videos/{nom-de-la-vidéo}/        # Répertoire par vidéo
│   ├── topic_definition.md          # Étape 1
│   ├── topic_research.md            # Étape 2
│   ├── podcast.txt                  # Étape 4 : script de narration
│   ├── phonemes.json                # Étape 4.5 : surcharges de prononciation zh-CN
│   ├── assets/manifest.json         # Étape 5 : registre des assets par section
│   ├── publish_info.md              # Étape 10 : titre/description/tags
│   ├── podcast_audio.wav            # Étape 7 : audio TTS
│   ├── podcast_audio.srt            # Étape 7 : sous-titres
│   ├── timing.json                  # Étape 7 : timeline (pilote les animations)
│   ├── thumbnail_*.png              # Étape 6
│   ├── output.mp4                   # Étape 9 : rendu 4K
│   ├── video_with_bgm.mp4           # Étape 9 : avec BGM
│   ├── final_video.mp4              # Étape 10 : sortie finale
│   └── bgm.mp3                      # Musique de fond
└── remotion.config.ts

--public-dir par vidéo

Chaque commande Remotion utilise --public-dir videos/{nom}/ — les assets de chaque vidéo restent dans son propre répertoire, permettant des rendus parallèles :

npx remotion studio src/remotion/index.ts --public-dir videos/{nom}/
npx remotion render ... videos/{nom}/output.mp4 --public-dir videos/{nom}/ --video-bitrate 16M

Ressources supplémentaires

Quand chargerFichier
Toujours (avant l'étape 1)workflow-script.md — tableaux de décision de mode, scénario de workflow complet
Toujours (avant l'étape 5)workflow-assets.md — planification des assets, politique de licence, motifs de composition
Toujours (avant l'étape 6)workflow-production.md — pipeline de production détaillé (TTS, rendu, prévisualisation)
Toujours (avant l'étape 8)design-guide.md — tailles minimales de texte, zones de sécurité, palette de couleurs, tolérances d'animation
Toujours (avant l'étape 10)workflow-publish.md — matrice de plateforme, format de publish_info.md, génération de contenu court
À la demandevisual-taste.md — ne le chargez que pour l'auto-examen visuel en mode Auto (image clé)
À la demande (vidéo d'amorçage)workflow-research.md — amorçage de recherche pour les sujets qui en ont besoin
À la demande (apprentissage du design)design-learning.md — lorsque l'utilisateur fournit une référence ou demande la gestion de profil

Préférences utilisateur

Toutes les préférences persistent dans user_prefs.json à la racine du projet. Valeurs par défaut :

{
  "global": {
    "tts": {
      "backend": "edge",   // ou "azure"
      "voice": null,       // auto-sélectionné par le backend
      "speed": 1.0,
      "pitch": 1.0
    },
    "platform": {
      "primary": "bilibili",
      "secondary": []
    },
    "brand": {
      "watermark": false
    }
  },
  "videos": {
    "bgm_path": null,
    "intro_path": null,
    "outro_path": null
  }
}

Dépannage

Problèmes courants

SymptômeCause probableSolution
check_prereqs.py échoueBackend TTS manquant ou variables d'environnement non définiesExécutez python3 scripts/check_prereqs.py --verbose pour des messages détaillés. Voir README.md.
timing.json ne correspond pas à l'audioTiming estimé manuellementRégénérez via align_timing_from_srt.py ou TTS complet.
TransitionSeries hors syncChevauchement non compenséAppliquez la mise à l'échelle proportionnelle de templates/Video.tsx.
Rendu 4K lentPremière exécution ou cache vidageLes rendus ultérieurs utilisent le cache Webpack de Remotion.
final_video.mp4 manquantverify_output.py non exécutéExécutez verify_output.py — il le crée automatiquement.

Obtenir de l'aide

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Skills associés