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épendance | Utilisation | Requis |
|---|---|---|
| Clé API AI Douyin | Proxy 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 TikHub | Solution 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-whisper | Conversion locale de la parole en texte. | Nécessaire uniquement pour ASR_BACKEND=faster-whisper |
| API ByteDance VC | Conversion cloud de la parole en texte. | Nécessaire uniquement pour ASR_BACKEND=volcengine |
| FFmpeg | Extraction de l'audio à partir de la vidéo. | ✅ (peut être ignoré pour les fichiers audio) |
| yt-dlp | Téléchargement de vidéos Bilibili ; capture des sous-titres YouTube. | Nécessaire uniquement pour Bilibili ou YouTube |
| jq | Analyse 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éfautfaster-whisper.VIDEO_INFO_PROVIDER: Optionnel, par défautai-douyin; peut être changé entikhubpour 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 lorsqueVIDEO_INFO_PROVIDER=tikhub.FW_MODEL_SIZE/FW_DEVICE/FW_COMPUTE_TYPE: Utilisé uniquement avec le backendfaster-whisper.FW_PYTHON: Optionnel, spécifie le Python sur lequelfaster-whisperest installé ; laissé vide pour utiliser par défaut le venv créé par l'assistant d'installation, puis recourir aupython3système.BYTEDANCE_VC_TOKEN/BYTEDANCE_VC_APPID: Utilisé uniquement avec le backendvolcengine.
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
- Douyin/TikTok :
- 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)
- Fichier vidéo local (
É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-whispervolcengine
É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'abordpython3 "$SKILL_DIR/scripts/install_faster_whisper.py", ou consultez docs/faster-whisper-setup.mdASR_BACKEND=volcengine: Consultez docs/bytedance-vc-setup.mdAI_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 :
| Plateforme | Caractéristique de l'URL | Méthode de traitement par défaut |
|---|---|---|
| Douyin/TikTok | douyin.com, v.douyin.com, tiktok.com | Proxy AI Douyin pour analyser le lien de téléchargement direct ; TikHub optionnel |
| Xiaohongshu | xiaohongshu.com, xhslink.com | Proxy AI Douyin pour analyser le lien de téléchargement direct ; TikHub optionnel |
| Bilibili | bilibili.com, b23.tv | Proxy AI Douyin pour analyser le lien de téléchargement direct ; peut recourir à yt-dlp si nécessaire |
| YouTube | youtube.com, youtu.be | N'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é quedevice="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.