Communitygithub.com

MadAppGang/claude-code

Transcription audio/vidéo avec OpenAI Whisper. Couvre l'installation, la sélection de modèles, les formats de transcription (SRT, VTT, JSON), la synchronisation temporelle et la diarisation des locuteurs. À utiliser pour transcrire des médias ou générer des sous-titres.

Qu'est-ce que claude-code ?

Cette compétence fournit un ensemble complet de motifs prêts pour la production pour la transcription audio/vidéo en utilisant OpenAI Whisper. Elle est utile pour tout développeur ou utilisateur d'agent IA qui a besoin de convertir du contenu audio ou vidéo en texte, notamment pour générer des sous-titres, des transcriptions de réunions, ou des sous-titres codés. Les plateformes prises en charge incluent les environnements Python (openai-whisper), l'implémentation C++ performante whisper.cpp, et l'option accélérée par GPU insanely-fast-whisper. Elle explique comment installer chaque option, sélectionner le modèle approprié (de tiny à large-v3) en fonction de la précision et de la vitesse requises, et transcrit des fichiers audio avec des commandes CLI simples. La compétence détaille également les formats de sortie (SRT, VTT, JSON) avec des exemples concrets, l'extraction audio à l'aide de ffmpeg, la synchronisation temporelle (y compris le timing image par image), la diarisation des locuteurs avec pyannote.audio, le traitement par lots, les optimisations de qualité (réduction de bruit, indication de langue, prompt initial), et la gestion des erreurs. Elle est conçue pour être intégrée avec d'autres compétences comme ffmpeg-core et final-cut-pro.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/MadAppGang/claude-code/tree/HEAD/plugins/video-editing/skills/transcription

Demander à votre IA préférée

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

Documentation

Transcription avec Whisper

Motifs prêts pour la production pour la transcription audio/vidéo avec OpenAI Whisper.

Configuration requise

Options d'installation

Option 1 : OpenAI Whisper (Python)

# macOS/Linux/Windows
pip install openai-whisper

# Vérification
whisper --help

Option 2 : whisper.cpp (C++ - plus rapide)

# macOS
brew install whisper-cpp

# Linux - compilation depuis les sources
git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp && make

# Windows - utiliser les binaires pré-construits ou compiler avec cmake

Option 3 : Insanely Fast Whisper (accéléré GPU)

pip install insanely-fast-whisper

Sélection du modèle

ModèleTailleVRAMPrécisionVitesseCas d'utilisation
tiny39M~1 GoFaibleLa plus rapideAperçus rapides
base74M~1 GoMoyenneRapideTranscriptions provisoires
small244M~2 GoBonneMoyenneUsage général
medium769M~5 GoMeilleureLenteTranscriptions de qualité
large-v31550M~10 GoMeilleureLa plus lenteProduction finale

Recommandation : Commencez avec small pour un bon équilibre vitesse/qualité. Utilisez large-v3 pour la livraison finale.

Transcription de base

Avec OpenAI Whisper

# Transcription de base (détection automatique de la langue)
whisper audio.mp3 --model small

# Spécification de la langue et du format de sortie
whisper audio.mp3 --model medium --language fr --output_format srt

# Plusieurs formats de sortie
whisper audio.mp3 --model small --output_format all

# Avec horodatages et timing au niveau du mot
whisper audio.mp3 --model small --word_timestamps True

Avec whisper.cpp

# Téléchargement du modèle d'abord
./models/download-ggml-model.sh base.en

# Transcription
./main -m models/ggml-base.en.bin -f audio.wav -osrt

# Avec horodatages
./main -m models/ggml-base.en.bin -f audio.wav -ocsv

Formats de sortie

SRT (SubRip Subtitle)

1
00:00:01,000 --> 00:00:04,500
Bonjour et bienvenue dans cette vidéo.

2
00:00:05,000 --> 00:00:08,200
Aujourd'hui, nous allons discuter du montage vidéo.

VTT (WebVTT)

WEBVTT

00:00:01.000 --> 00:00:04.500
Bonjour et bienvenue dans cette vidéo.

00:00:05.000 --> 00:00:08.200
Aujourd'hui, nous allons discuter du montage vidéo.

JSON (avec timing au niveau du mot)

{
  "text": "Bonjour et bienvenue dans cette vidéo.",
  "segments": [
    {
      "id": 0,
      "start": 1.0,
      "end": 4.5,
      "text": " Bonjour et bienvenue dans cette vidéo.",
      "words": [
        {"word": "Bonjour", "start": 1.0, "end": 1.3},
        {"word": "et", "start": 1.4, "end": 1.5},
        {"word": "bienvenue", "start": 1.6, "end": 2.0},
        {"word": "dans", "start": 2.1, "end": 2.2},
        {"word": "cette", "start": 2.3, "end": 2.5},
        {"word": "vidéo", "start": 2.6, "end": 3.0}
      ]
    }
  ]
}

Extraction audio pour la transcription

Avant de transcrire une vidéo, extrayez l'audio dans un format optimal :

# Extraction audio en WAV (16 kHz, mono - optimal pour Whisper)
ffmpeg -i video.mp4 -ar 16000 -ac 1 -c:a pcm_s16le audio.wav

# Extraction en WAV haute qualité pour archivage
ffmpeg -i video.mp4 -vn -c:a pcm_s16le audio.wav

# Extraction en MP3 compressé (plus petit, fonctionne toujours)
ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 2 audio.mp3

Synchronisation temporelle

Conversion JSON Whisper en timing FCP

import json

def whisper_to_fcp_timing(whisper_json_path, fps=24):
    """Convertit la sortie JSON Whisper en timing compatible FCP."""
    with open(whisper_json_path) as f:
        data = json.load(f)

    segments = []
    for seg in data.get("segments", []):
        segments.append({
            "start_time": seg["start"],
            "end_time": seg["end"],
            "start_frame": int(seg["start"] * fps),
            "end_frame": int(seg["end"] * fps),
            "text": seg["text"].strip(),
            "words": seg.get("words", [])
        })

    return segments

Timing image par image

# Obtenir le nombre exact d'images et la durée
ffprobe -v error -count_frames -select_streams v:0 \
  -show_entries stream=nb_read_frames,duration,r_frame_rate \
  -of json video.mp4

Diarisation des locuteurs

Pour du contenu avec plusieurs locuteurs, utilisez pyannote.audio :

pip install pyannote.audio
from pyannote.audio import Pipeline

pipeline = Pipeline.from_pretrained("pyannote/[email protected]")
diarization = pipeline("audio.wav")

for turn, _, speaker in diarization.itertracks(yield_label=True):
    print(f"{turn.start:.1f}s - {turn.end:.1f}s : {speaker}")

Traitement par lots

#!/bin/bash
# Transcrire toutes les vidéos d'un répertoire

MODEL="small"
OUTPUT_DIR="transcripts"
mkdir -p "$OUTPUT_DIR"

for video in *.mp4 *.mov *.avi; do
  [[ -f "$video" ]] || continue

  base="${video%.*}"

  # Extraction audio
  ffmpeg -i "$video" -ar 16000 -ac 1 -c:a pcm_s16le "/tmp/${base}.wav" -y

  # Transcription
  whisper "/tmp/${base}.wav" --model "$MODEL" \
    --output_format all \
    --output_dir "$OUTPUT_DIR"

  # Nettoyage de l'audio temporaire
  rm "/tmp/${base}.wav"

  echo "Transcrit : $video"
done

Optimisation de la qualité

Améliorer la précision

  1. Réduction du bruit avant la transcription :
ffmpeg -i noisy_audio.wav -af "highpass=f=200,lowpass=f=3000,afftdn=nf=-25" clean_audio.wav
  1. Utiliser une indication de langue :
whisper audio.mp3 --language fr --model medium
  1. Fournir une invite initiale pour le contexte :
whisper audio.mp3 --initial_prompt "Discussion technique sur le logiciel de montage vidéo."

Conseils de performance

  1. Accélération GPU (si disponible) :
whisper audio.mp3 --model large-v3 --device cuda
  1. Traiter par morceaux pour les longues vidéos :
# Diviser l'audio en segments de 10 minutes
# Transcrire chaque segment
# Fusionner les résultats avec ajustement du décalage temporel

Gestion des erreurs

# Valider le fichier audio avant la transcription
validate_audio() {
  local file="$1"
  if ffprobe -v error -select_streams a:0 -show_entries stream=codec_type -of csv=p=0 "$file" 2>/dev/null | grep -q "audio"; then
    return 0
  else
    echo "Erreur : Aucun flux audio trouvé dans $file"
    return 1
  fi
}

# Vérifier l'installation de Whisper
check_whisper() {
  if command -v whisper &> /dev/null; then
    echo "Whisper disponible"
    return 0
  else
    echo "Erreur : Whisper non installé. Exécutez : pip install openai-whisper"
    return 1
  fi
}

Compétences associées

  • ffmpeg-core - Extraction audio et prétraitement
  • final-cut-pro - Importation de transcriptions en tant que titres/marqueurs

Skills associés