Communitygithub.com

video-to-subtitle-summary — URL→sous-titres Whisper

Douyin/Xiaohongshu/Bilibili/YouTube ou fichier local → sous-titres faster-whisper + résumé AI. 207★.

Qu'est-ce que video-to-subtitle-summary — URL→sous-titres Whisper ?

Video Localization étape 1 : imlewc 207★. URL/local → Whisper + résumé. Fresque vs 26/09 et 24/09.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add imlewc/video-to-subtitle-summary-skill

Demander à votre IA préférée

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

Documentation

Vidéo vers sous-titres et résumé IA

Aperçu

Convertit les vidéos de plateformes courtes (Douyin, Xiaohongshu, Bilibili, YouTube, etc.) ou les fichiers vidéo/audio locaux en texte de sous-titres et génère un résumé IA.

Processus principal :

  • Vidéo en ligne : Obtenir les informations de la vidéo → Télécharger la vidéo/capturer directement les sous-titres → Choisir le backend de sous-titres → Générer les sous-titres → Résumé IA
  • Fichier local : Extraire l'audio (si nécessaire) → Choisir le backend de sous-titres → Générer les sous-titres → Résumé IA

Par défaut, utilise faster-whisper en local. Il est également possible de basculer vers l'API Volcengine VC via des variables d'environnement. YouTube utilise en priorité yt-dlp pour récupérer directement les sous-titres manuels ou automatiques. Ce n'est que lorsqu'aucun sous-titre n'est disponible qu'il est nécessaire de télécharger l'audio/vidéo et de recourir à l'ASR.

Quand l'utiliser

  • L'utilisateur fournit un lien de plateforme vidéo courte (Douyin, Xiaohongshu, Bilibili, YouTube, etc.) et demande l'extraction de sous-titres ou la génération d'un résumé.
  • L'utilisateur fournit le chemin d'un fichier vidéo/audio local et demande la conversion en sous-titres ou la génération d'un résumé.
  • L'utilisateur demande à consulter l'historique des tâches AI Douyin, les tâches récentes, ou la liste des tâches.
  • Il est nécessaire de convertir le contenu d'une vidéo en texte.

Ne convient pas pour : Reconnaissance vocale en temps réel, sous-titres en direct.

Dépendances externes

DépendanceUtilisationRequis
Clé API AI DouyinProxy de téléchargement/analyse vidéo recommandé ; un crédit gratuit est disponible après inscription, 1 point est déduit après une analyse réussie du lien de téléchargement direct.Nécessaire uniquement pour Douyin/Xiaohongshu/Bilibili
API TikHubSolution avancée/auto-hébergée optionnelle : utilisez votre propre jeton TikHub pour analyser directement.Optionnel
Python 3.9+Exécute l'assistant faster-whisper.Nécessaire uniquement pour ASR_BACKEND=faster-whisper
faster-whisperConversion locale de la parole en texte.Nécessaire uniquement pour ASR_BACKEND=faster-whisper
API ByteDance VCConversion cloud de la parole en texte.Nécessaire uniquement pour ASR_BACKEND=volcengine
FFmpegExtraction de l'audio à partir de la vidéo.✅ (peut être ignoré pour les fichiers audio)
yt-dlpTéléchargement de vidéos Bilibili ; capture des sous-titres YouTube.Nécessaire uniquement pour Bilibili ou YouTube
jqAnalyse des réponses JSON AI Douyin/TikHub.Nécessaire pour le mode vidéo en ligne

Variables d'environnement

Lues via des variables d'environnement, prises en charge de la manière suivante :

Option 1 : Fichier .env (recommandé) — Créez un fichier .env dans le répertoire skill :

ASR_BACKEND="faster-whisper"
VIDEO_INFO_PROVIDER="ai-douyin"
AI_DOUYIN_API_BASE="https://top9.cc"
AI_DOUYIN_API_KEY="votre_clé_api_ai_douyin"
TIKHUB_TOKEN=""

FW_MODEL_SIZE="small"
FW_DEVICE="auto"
FW_COMPUTE_TYPE=""
FW_PYTHON=""

BYTEDANCE_VC_TOKEN="votre_jeton"
BYTEDANCE_VC_APPID="votre_id_application"

Option 2 : Configuration Shell — Ajoutez à ~/.zshrc ou ~/.bashrc :

export ASR_BACKEND="faster-whisper"
export VIDEO_INFO_PROVIDER="ai-douyin"
export AI_DOUYIN_API_BASE="https://top9.cc"
export AI_DOUYIN_API_KEY="votre_clé_api_ai_douyin"
export TIKHUB_TOKEN=""

export FW_MODEL_SIZE="small"
export FW_DEVICE="auto"
export FW_COMPUTE_TYPE=""
export FW_PYTHON=""

export BYTEDANCE_VC_TOKEN="votre_jeton"
export BYTEDANCE_VC_APPID="votre_id_application"

Explication :

  • ASR_BACKEND : Optionnel, par défaut faster-whisper.
  • VIDEO_INFO_PROVIDER : Optionnel, par défaut ai-douyin ; peut être changé en tikhub pour utiliser votre propre jeton TikHub.
  • AI_DOUYIN_API_BASE / AI_DOUYIN_API_KEY : Proxy d'analyse vidéo recommandé ; nécessaire pour Douyin/Xiaohongshu/Bilibili ; pas pour YouTube.
  • TIKHUB_TOKEN : Solution avancée/auto-hébergée optionnelle ; nécessaire lorsque VIDEO_INFO_PROVIDER=tikhub.
  • FW_MODEL_SIZE / FW_DEVICE / FW_COMPUTE_TYPE : Utilisé uniquement avec le backend faster-whisper.
  • FW_PYTHON : Optionnel, spécifie le Python sur lequel faster-whisper est installé ; laissé vide pour utiliser par défaut le venv créé par l'assistant d'installation, puis recourir au python3 système.
  • BYTEDANCE_VC_TOKEN / BYTEDANCE_VC_APPID : Utilisé uniquement avec le backend volcengine.

Les instructions d'installation et d'exécution se trouvent dans Guide de configuration AI Douyin, Guide de demande TikHub, Guide d'installation faster-whisper et Guide d'activation du moteur Volcengine

Étapes d'exécution

Étape 0 : Déterminer le type d'entrée

Déterminez le mode de traitement en fonction de l'entrée de l'utilisateur :

  • Mode vidéo en ligne : Entrée sous forme d'URL
    • Douyin/TikTok : douyin.com, v.douyin.com, tiktok.com
    • Xiaohongshu : xiaohongshu.com, xhslink.com
    • Bilibili : bilibili.com, b23.tv
    • YouTube : youtube.com, youtu.be
  • Mode fichier local : Entrée sous forme de chemin de fichier local
    • Fichier vidéo local (.mp4, .mov, .avi, .mkv, etc.) → Commencer à l'étape 3 (extraire l'audio)
    • Fichier audio local (.mp3, .wav, .m4a, .flac, etc.) → Sauter l'étape 3, commencer directement à l'étape 4 (transcription)

Étape 0.5 : Lire la configuration du backend

Lisez d'abord ASR_BACKEND. S'il n'est pas configuré, utilisez faster-whisper par défaut :

SKILL_DIR="${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.claude/skills/video-to-subtitle-summary"
ENV_FILE="$SKILL_DIR/.env"

read_env() {
  local key="$1"
  if [ -f "$ENV_FILE" ]; then
    grep "^${key}=" "$ENV_FILE" | head -1 | cut -d'=' -f2- | tr -d '"' | tr -d "'"
  else
    printenv "$key"
  fi
}

ASR_BACKEND="$(read_env ASR_BACKEND)"
[ -z "$ASR_BACKEND" ] && ASR_BACKEND="faster-whisper"

echo "ASR_BACKEND=$ASR_BACKEND"

Valeurs prises en charge :

  • faster-whisper
  • volcengine

Étape 0.6 : Vérification de l'environnement (doit être effectuée en premier)

Avant de commencer tout traitement, vérifiez les dépendances nécessaires pour le mode actuel et le backend de sous-titres actuel.

SKILL_DIR="${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.claude/skills/video-to-subtitle-summary"
ENV_FILE="$SKILL_DIR/.env"

read_env() {
  local key="$1"
  if [ -f "$ENV_FILE" ]; then
    grep "^${key}=" "$ENV_FILE" | head -1 | cut -d'=' -f2- | tr -d '"' | tr -d "'"
  else
    printenv "$key"
  fi
}

ASR_BACKEND="$(read_env ASR_BACKEND)"
[ -z "$ASR_BACKEND" ] && ASR_BACKEND="faster-whisper"
VIDEO_INFO_PROVIDER="$(read_env VIDEO_INFO_PROVIDER)"
[ -z "$VIDEO_INFO_PROVIDER" ] && VIDEO_INFO_PROVIDER="ai-douyin"
AI_DOUYIN_API_BASE="$(read_env AI_DOUYIN_API_BASE)"
[ -z "$AI_DOUYIN_API_BASE" ] && AI_DOUYIN_API_BASE="https://top9.cc"
AI_DOUYIN_API_KEY="$(read_env AI_DOUYIN_API_KEY)"
TIKHUB_TOKEN="$(read_env TIKHUB_TOKEN)"
BYTEDANCE_VC_TOKEN="$(read_env BYTEDANCE_VC_TOKEN)"
BYTEDANCE_VC_APPID="$(read_env BYTEDANCE_VC_APPID)"
FW_PYTHON="$(read_env FW_PYTHON)"
[ -z "$FW_PYTHON" ] && [ -x "$HOME/.cache/video-to-subtitle-summary/faster-whisper-venv/bin/python" ] && FW_PYTHON="$HOME/.cache/video-to-subtitle-summary/faster-whisper-venv/bin/python"
[ -z "$FW_PYTHON" ] && FW_PYTHON="python3"

MISSING=""

if [ "{INPUT_MODE}" = "url" ]; then
  if [ "{PLATFORM}" = "douyin" ] || [ "{PLATFORM}" = "xiaohongshu" ] || [ "{PLATFORM}" = "bilibili" ]; then
    if [ "$VIDEO_INFO_PROVIDER" = "ai-douyin" ]; then
      [ -z "$AI_DOUYIN_API_KEY" ] && MISSING="$MISSING AI_DOUYIN_API_KEY"
    elif [ "$VIDEO_INFO_PROVIDER" = "tikhub" ]; then
      [ -z "$TIKHUB_TOKEN" ] && MISSING="$MISSING TIKHUB_TOKEN"
    else
      MISSING="$MISSING invalid_VIDEO_INFO_PROVIDER"
    fi
  fi
  if [ "$VIDEO_INFO_PROVIDER" = "ai-douyin" ] || [ "$VIDEO_INFO_PROVIDER" = "tikhub" ]; then
    command -v jq >/dev/null 2>&1 || MISSING="$MISSING jq"
  fi
  if [ "{PLATFORM}" = "bilibili" ] || [ "{PLATFORM}" = "youtube" ]; then
    command -v yt-dlp >/dev/null 2>&1 || MISSING="$MISSING yt-dlp"
  fi
fi

if [ "{NEEDS_FFMPEG}" = "yes" ] && [ "{PLATFORM}" != "youtube" ]; then
  command -v ffmpeg >/dev/null 2>&1 || MISSING="$MISSING ffmpeg"
fi

if [ "$ASR_BACKEND" = "faster-whisper" ]; then
  command -v "$FW_PYTHON" >/dev/null 2>&1 || [ -x "$FW_PYTHON" ] || MISSING="$MISSING FW_PYTHON"
  "$FW_PYTHON" - <<'PY' >/dev/null 2>&1 || MISSING="$MISSING faster-whisper"
import faster_whisper
import ctranslate2
PY
elif [ "$ASR_BACKEND" = "volcengine" ]; then
  [ -z "$BYTEDANCE_VC_TOKEN" ] && MISSING="$MISSING BYTEDANCE_VC_TOKEN"
  [ -z "$BYTEDANCE_VC_APPID" ] && MISSING="$MISSING BYTEDANCE_VC_APPID"
else
  MISSING="$MISSING invalid_ASR_BACKEND"
fi

if [ -n "$MISSING" ]; then
  echo "ERREUR : Dépendances ou configurations manquantes :$MISSING"
  echo "ASR_BACKEND=$ASR_BACKEND VIDEO_INFO_PROVIDER=$VIDEO_INFO_PROVIDER"
  echo "Valeurs possibles pour ASR_BACKEND : faster-whisper / volcengine"
  echo "Valeurs possibles pour VIDEO_INFO_PROVIDER : ai-douyin / tikhub"
  exit 1
else
  echo "OK : Les dépendances d'exécution sont prêtes (ASR_BACKEND=$ASR_BACKEND)"
fi

Si la vérification échoue :

  • ASR_BACKEND=faster-whisper : Exécutez d'abord python3 "$SKILL_DIR/scripts/install_faster_whisper.py", ou consultez docs/faster-whisper-setup.md
  • ASR_BACKEND=volcengine : Consultez docs/bytedance-vc-setup.md
  • AI_DOUYIN_API_KEY : Inscrivez-vous sur AI Douyin pour obtenir un crédit gratuit et créez une clé API ; si le solde est insuffisant, rechargez des points, ou passez à VIDEO_INFO_PROVIDER=tikhub + TIKHUB_TOKEN

Étape 1 : Obtenir les informations de la vidéo / le lien de téléchargement direct (uniquement en mode vidéo en ligne)

Identifiez la plateforme en fonction du nom de domaine de l'URL :

PlateformeCaractéristique de l'URLMéthode de traitement par défaut
Douyin/TikTokdouyin.com, v.douyin.com, tiktok.comProxy AI Douyin pour analyser le lien de téléchargement direct ; TikHub optionnel
Xiaohongshuxiaohongshu.com, xhslink.comProxy AI Douyin pour analyser le lien de téléchargement direct ; TikHub optionnel
Bilibilibilibili.com, b23.tvProxy AI Douyin pour analyser le lien de téléchargement direct ; peut recourir à yt-dlp si nécessaire
YouTubeyoutube.com, youtu.beN'appelle pas AI Douyin/TikHub, passe directement à l'étape 2 pour capturer les sous-titres

Recommandation par défaut : Proxy AI Douyin

AI Douyin est adapté aux utilisateurs qui ne souhaitent pas s'inscrire séparément à TikHub. Inscrivez-vous sur https://top9.cc pour obtenir un crédit gratuit et créez une clé API. 1 point est déduit après une analyse réussie du lien de téléchargement direct ; aucun point n'est déduit en cas d'échec. Si le solde est insuffisant, l'API renvoie HTTP 402 / insufficient balance.

SKILL_DIR="${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.claude/skills/video-to-subtitle-summary"
ENV_FILE="$SKILL_DIR/.env"
read_env() {
  local key="$1"
  if [ -f "$ENV_FILE" ]; then
    grep "^${key}=" "$ENV_FILE" | head -1 | cut -d'=' -f2- | tr -d '"' | tr -d "'"
  else
    printenv "$key"
  fi
}

AI_DOUYIN_API_BASE="$(read_env AI_DOUYIN_API_BASE)"
[ -z "$AI_DOUYIN_API_BASE" ] && AI_DOUYIN_API_BASE="https://top9.cc"
AI_DOUYIN_API_KEY="$(read_env AI_DOUYIN_API_KEY)"

# L'API Base peut être remplie avec https://top9.cc ou https://top9.cc/api/v1
case "$AI_DOUYIN_API_BASE" in
  */api/v1) AI_DOUYIN_DOWNLOAD_URL_ENDPOINT="$AI_DOUYIN_API_BASE/video/download-url" ;;
  */api) AI_DOUYIN_DOWNLOAD_URL_ENDPOINT="$AI_DOUYIN_API_BASE/v1/video/download-url" ;;
  *) AI_DOUYIN_DOWNLOAD_URL_ENDPOINT="${AI_DOUYIN_API_BASE%/}/api/v1/video/download-url" ;;
esac

curl -sS -w '\n%{http_code}' -X POST "$AI_DOUYIN_DOWNLOAD_URL_ENDPOINT" \
  -H "X-API-Key: $AI_DOUYIN_API_KEY" \
  -H "Content-Type: application/json" \
  -d "$(jq -n --arg url "{ORIGINAL_URL}" '{url: $url}')" \
  > /tmp/video_analysis/download_url_response.txt

HTTP_CODE=$(tail -n1 /tmp/video_analysis/download_url_response.txt)
sed '$d' /tmp/video_analysis/download_url_response.txt > /tmp/video_analysis/download_url.json

if [ "$HTTP_CODE" = "402" ]; then
  echo "ERREUR : Solde AI Douyin insuffisant (insufficient balance). Veuillez acheter des points sur https://top9.cc, ou passer à VIDEO_INFO_PROVIDER=tikhub + TIKHUB_TOKEN."
  exit 1
elif [ "$HTTP_CODE" = "401" ]; then
  echo "ERREUR : La clé API AI Douyin est manquante ou invalide. Veuillez vérifier AI_DOUYIN_API_KEY."
  exit 1
elif [ "$HTTP_CODE" -lt 200 ] || [ "$HTTP_CODE" -ge 300 ]; then
  echo "ERREUR : L'analyse AI Douyin a échoué (HTTP $HTTP_CODE)"
  cat /tmp/video_analysis/download_url.json
  exit 1
fi

VIDEO_URL=$(jq -r '.download_url // empty' /tmp/video_analysis/download_url.json)
VIDEO_URL_COUNT=$(jq -r '(.download_urls // [.download_url] | map(select(. != null and . != "")) | length)' /tmp/video_analysis/download_url.json)
EXTRACTED_URL=$(jq -r '.extracted_url // empty' /tmp/video_analysis/download_url.json)
DOWNLOAD_COST=$(jq -r '.cost // 1' /tmp/video_analysis/download_url.json)
[ -z "$VIDEO_URL" ] && echo "ERREUR : Aucun download_url retourné" && cat /tmp/video_analysis/download_url.json && exit 1

Extrayez les champs clés :

jq '{download_url, download_urls_count: (.download_urls // [] | length), extracted_url, cost}' /tmp/video_analysis/download_url.json

Solution d'obtention d'informations vidéo optionnelle : Votre propre jeton TikHub

Lorsque VIDEO_INFO_PROVIDER=tikhub, utilisez votre propre jeton TikHub pour analyser directement. Faites attention à ne pas écrire le vrai jeton dans les journaux ou les réponses.

Douyin/TikTok :

curl -s -X GET "https://api.tikhub.io/api/v1/hybrid/video_data?url={ENCODED_URL}&minimal=true" \
  -H "Authorization: Bearer votre_jeton_api_tikhub" \
  -H "Accept: application/json"

Priorité à l'URL sans filigrane :

jq -r '.data.video_data.nwm_video_url // .data.video.play_addr.url_list[0] // empty'

Xiaohongshu :

curl -s -X GET "https://api.tikhub.io/api/v1/xiaohongshu/web/get_note_info_v7?share_text={ENCODED_URL}" \
  -H "Authorization: Bearer votre_jeton_api_tikhub" \
  -H "Accept: application/json"

Bilibili :

curl -s -X GET "https://api.tikhub.io/api/v1/bilibili/web/fetch_one_video_v3?url={ENCODED_URL}" \
  -H "Authorization: Bearer votre_jeton_api_tikhub" \
  -H "Accept: application/json"

Si Bilibili n'obtient pas de lien de téléchargement direct, vous pouvez utiliser yt-dlp à l'étape 2 pour télécharger.

Étape 1.5 : Consulter l'historique des tâches AI Douyin de l'utilisateur (sur demande)

Lorsque l'utilisateur demande à voir ses tâches historiques / tâches récentes / liste des tâches, appelez GET /api/v1/tasks de AI Douyin. Cette interface utilise l'authentification X-API-Key et ne renvoie que les tâches de l'utilisateur correspondant à la clé API actuelle.

SKILL_DIR="${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.claude/skills/video-to-subtitle-summary"

python3 "$SKILL_DIR/scripts/list_ai_douyin_tasks.py" \
  --page 1 \
  --page-size 20

Filtres optionnels :

python3 "$SKILL_DIR/scripts/list_ai_douyin_tasks.py" --status completed --page 1 --page-size 10
python3 "$SKILL_DIR/scripts/list_ai_douyin_tasks.py" --search "mot_clé" --json

Le script lit par défaut AI_DOUYIN_API_BASE / AI_DOUYIN_API_KEY depuis $SKILL_DIR/.env ou les variables d'environnement. N'affichez pas la vraie clé API lors de la sortie à l'utilisateur.

Étape 2 : Télécharger la vidéo (uniquement en mode vidéo en ligne)

Utilisez différentes méthodes de téléchargement selon la plateforme :

YouTube (priorité à la capture directe des sous-titres, pas de téléchargement de la vidéo) :

mkdir -p /tmp/video_analysis/{VIDEO_ID}
SKILL_DIR="${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.claude/skills/video-to-subtitle-summary"
python3 "$SKILL_DIR/scripts/download_youtube_subtitles.py" \
  "https://www.youtube.com/watch?v={VIDEO_ID}" \
  --output-dir /tmp/video_analysis/{VIDEO_ID} \
  --languages zh-Hans,zh-Hant,zh,en

Les fichiers de sortie sont fixes :

  • /tmp/video_analysis/{VIDEO_ID}/subtitle.srt
  • /tmp/video_analysis/{VIDEO_ID}/text.txt

Si la commande indique qu'aucun sous-titre n'est disponible, utilisez ensuite yt-dlp pour télécharger l'audio ou la vidéo, et continuez à partir de l'étape 3 avec ASR_BACKEND.

Douyin / TikTok / Xiaohongshu / Bilibili (lorsque VIDEO_URL est déjà un lien de téléchargement direct) :

mkdir -p /tmp/video_analysis/{VIDEO_ID}
SKILL_DIR="${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.claude/skills/video-to-subtitle-summary"
python3 "$SKILL_DIR/scripts/download_video_candidates.py" \
  --response-json /tmp/video_analysis/download_url.json \
  --output /tmp/video_analysis/{VIDEO_ID}/video.mp4 \
  --timeout 30

Bilibili (recours lorsqu'aucun lien de téléchargement direct n'est disponible) :

mkdir -p /tmp/video_analysis/{BVID}
yt-dlp -o /tmp/video_analysis/{BVID}/video.mp4 "https://www.bilibili.com/video/{BVID}/"

Étape 3 : Extraire l'audio (peut être ignoré pour les fichiers audio locaux)

En mode fichier local, si l'entrée est un fichier vidéo local, remplacez {VIDEO_ID} par le nom du fichier (sans extension), et le chemin d'entrée par le chemin réel de la vidéo.

ffmpeg -i /tmp/video_analysis/{VIDEO_ID}/video.mp4 -q:a 0 -map a -y /tmp/video_analysis/{VIDEO_ID}/audio.mp3

Étape 4 : Sélectionner le backend de sous-titres selon ASR_BACKEND

Si la plateforme est YouTube et que l'étape 2 a déjà généré subtitle.srt et text.txt avec succès, sautez cette étape et passez directement à l'étape 5 pour le résumé.

Option A : ASR_BACKEND=faster-whisper (par défaut)

Chemin de l'assistant :

$SKILL_DIR/scripts/transcribe_faster_whisper.py

Exécutez la commande :

SKILL_DIR="${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.claude/skills/video-to-subtitle-summary"
FW_PYTHON="${FW_PYTHON:-$HOME/.cache/video-to-subtitle-summary/faster-whisper-venv/bin/python}"
[ -x "$FW_PYTHON" ] || FW_PYTHON="python3"
"$FW_PYTHON" "$SKILL_DIR/scripts/transcribe_faster_whisper.py" \
  /tmp/video_analysis/{VIDEO_ID}/audio.mp3 \
  --output-dir /tmp/video_analysis/{VIDEO_ID}

Explication :

  • L'assistant lira automatiquement FW_MODEL_SIZE, FW_DEVICE, FW_COMPUTE_TYPE.
  • Lorsque FW_DEVICE=auto, ce n'est que si NVIDIA/CUDA est détecté que device="cuda" sera utilisé.
  • Les fichiers de sortie sont fixes :
    • /tmp/video_analysis/{VIDEO_ID}/subtitle.srt
    • /tmp/video_analysis/{VIDEO_ID}/text.txt

Option B : ASR_BACKEND=volcengine

Soumettez la tâche :

SKILL_DIR="${SKILL_DIR:-$HOME/.codex/skills/video-to-subtitle-summary}"
[ -d "$SKILL_DIR" ] || SKILL_DIR="$HOME/.claude/skills/video-to-subtitle-summary"
python3 "$SKILL_DIR/scripts/submit_volcengine_task.py" \
  --audio /tmp/video_analysis/{VIDEO_ID}/audio.mp3 \
  --output-dir /tmp/video_analysis/{VIDEO_ID} \
  --token "$BYTEDANCE_VC_TOKEN" \
  --appid "$BYTEDANCE_VC_APPID"

Les fichiers de sortie sont fixes :

  • /tmp/video_analysis/{VIDEO_ID}/subtitle.srt
  • /tmp/video_analysis/{VIDEO_ID}/text.txt

Étape 5 : Résumé IA du contenu vidéo

Quelle que soit la méthode de génération des sous-titres, le fichier texte final sera toujours :

/tmp/video_analysis/{VIDEO_ID}/text.txt

Lisez ce fichier et demandez au modèle de résumer le contenu de la vidéo. Fournissez des informations de fond (plateforme, auteur, titre) pour un meilleur contexte si disponible.

Directives de résumé :

  • Le résumé doit refléter la structure du contenu original ; si des commentaires sont inclus dans les sous-titres en tant que tâche hors ligne, le résumé doit distinguer le contenu principal des commentaires.
  • Si le contenu vidéo est une publicité, une démonstration de produit, un tutoriel, etc., le résumé doit mettre en évidence le nom du produit, la marque, les caractéristiques et les points clés.
  • Si le contenu vidéo est une émission de divertissement, une performance, un film, etc., le résumé peut être plus libre, mais il doit inclure le titre, le type et les points forts de l'émission ou de la performance.
  • Le résumé doit être en chinois (simplifié).
  • Limitez le résumé à un paragraphe.
  • Si l'utilisateur demande un résumé dans un style spécifique, exécutez-le selon ses instructions.

Exemple de sortie (la partie est un exemple uniquement) :

## Résumé vidéo

**Titre :** [Titre de la vidéo]
**Auteur :** [Nom de l'auteur]
**Plateforme :** [Niveau de la plateforme / Douyin / Xiaohongshu / Bilibili / YouTube ...]

[Résumé]

## Sous-titres

```srt
1
00:00:00,000 --> 00:00:05,000
Bonjour à tous, bienvenue sur ma chaîne.

2
00:00:05,000 --> 00:00:10,000
Aujourd'hui, je vais vous présenter...

Le format du fichier de sous-titres montre également le fichier SRT.

## Documents

Les documents suivants sont disponibles dans le répertoire `docs/` de ce skill :

- [Guide de configuration AI Douyin](./docs/ai-douyin-setup.md) — Inscription, obtention de la clé API, recharge de points, utilisation de TikHub
- [Guide de demande TikHub](./docs/tikhub-setup.md) — Comment obtenir un jeton TikHub
- [Guide d'installation faster-whisper](./docs/faster-whisper-setup.md) — Installation de faster-whisper
- [Guide d'activation du moteur Volcengine](./docs/bytedance-vc-setup.md) — Obtention du jeton et de l'ID d'application de l'API Volcengine

Si l'utilisateur souhaite plus d'informations sur la configuration, veuillez orienter vers les documents ci-dessus.

## Exemples de cas d'utilisation

**Cas 1 : L'utilisateur fournit un lien Douyin**

Utilisateur : Aide-moi à résumer cette vidéo Douyin : https://v.douyin.com/xxxxxxx/


1. Déterminer la plateforme (douyin) en fonction de l'URL.
2. Lire `ASR_BACKEND` (par défaut `faster-whisper`).
3. Vérifier les dépendances (AI_DOUYIN_API_KEY, jq, ffmpeg, faster-whisper).
4. Appeler AI Douyin pour obtenir le lien de téléchargement direct.
5. Télécharger la vidéo.
6. Extraire l'audio (ffmpeg).
7. Transférer en texte (faster-whisper).
8. Résumer.

**Cas 2 : L'utilisateur fournit une vidéo YouTube**

Utilisateur : Résume cette vidéo YouTube : https://www.youtube.com/watch?v=xxxxx


1. Déterminer la plateforme (youtube) en fonction de l'URL.
2. Vérifier les dépendances (yt-dlp).
3. Utiliser `download_youtube_subtitles.py` pour essayer d'obtenir les sous-titres.
   - S'il y a des sous-titres : les traiter directement, sauter les étapes 3-4.
   - S'il n'y a pas de sous-titres : utiliser yt-dlp pour télécharger l'audio, et continuer à l'étape 3-4.
4. Résumer.

**Cas 3 : L'utilisateur fournit un fichier audio/vidéo local**

Utilisateur : Aide-moi à transcrire cet enregistrement vocal : /chemin/vers/enregistrement.mp3


1. Déterminer que l'entrée est un fichier audio local (mp3), sauter directement la conversion vidéo vers audio.
2. Transférer en texte avec `ASR_BACKEND`.
3. Résumer.

Skills associés