3.6 KiB
3.6 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Projet
Script Python standalone de conversion vidéo vers AV1 (libsvtav1) / Opus (libopus) en conteneur MKV, avec sélection automatique du CRF via ab-av1 crf-search (VMAF 96), support HDR10/HDR10+, détection de bandes noires, et normalisation audio.
Utilisation
./vid_convert.py <fichier_entree>
./vid_convert.py -h # aide
./vid_convert.py -d <fichier> # mode debug
./vid_convert.py -s <fichier> # avec stabilisation vidéo
./vid_convert.py -a <fichier> # tuning animation
./vid_convert.py -c <fichier> # restauration VHS
./vid_convert.py --interlaced <fichier> # forcer le désentrelacement (yadif)
Pas de build, pas de tests, pas de linter configuré. Exécution directe Python 3.
Dépendances externes requises
ffmpegetffprobe— encodage et extraction de métadonnées (libsvtav1 + libopus requis)ab-av1— sélection automatique du CRF par crf-search (VMAF 96)mkvmerge(MkvToolNix) — assemblage du conteneur MKV finalhdr10plus_parser(binaire inclus) — extraction/injection des métadonnées HDR10+
Architecture
Fichier unique : vid_convert.py. Flux d'exécution séquentiel :
get_infos(file)— ffprobe JSON → métadonnées vidéo/audio/sous-titres, détection HDR10+, Dolby Vision, conteneur sourcecropping(file, infos)— cropdetect FFmpeg → suppression des bandes noiresvolume_audio(file, infos)— volumedetect FFmpeg → ajustement par piste audiofind_crf(file, enc_options, hdr)— ab-av1 crf-search → CRF optimal pour VMAF 96extract_subs(file, track, lang)— extraction des pistes de sous-titresconvert_audio(...)— encodage libopus VBR par piste (128k/320k/450k selon canaux)convert_video(...)— encodage libsvtav1 (preset=3, tune=0), HDR10/HDR10+ via-svtav1-paramscreate_mkv(filename)— mkvmerge → assemblage MKV final (NEW_{basename}.mkv)
Points clés
- Sortie vidéo :
yuv420p10le(10 bits), encodage en une seule passe - HDR10 statique : mastering display + content-light via
-svtav1-params - HDR10+ : injection native SVT-AV1 via
hdr10plus-json=dans-svtav1-params - Dolby Vision : détection uniquement, fallback automatique vers HDR10 (Profile 8) ou avertissement (Profile 5)
- Les fichiers temporaires passent par
/tmp/(métadonnées HDR10+, options mkvmerge JSON) - Le filtre VHS combine
hqdn3d+unsharp - La stabilisation utilise
vidstabdetect+vidstabtransformen deux passes
Gotchas
- libsvtav1 + libopus requis : le binaire FFmpeg doit être compilé avec
--enable-libsvtav1et--enable-libopus. Vérifier avecffmpeg -codecs | grep -E 'svt|opus'. - ab-av1 dans le PATH :
ab-av1 crf-searchdoit être accessible. En cas d'échec, fallback automatique sur CRF 32. - Fichier de sortie :
NEW_{nom_source}.mkv, généré dans le même répertoire que la source. Les fichiers temporaires (_video.mkv,_audio_*.mka,_subtitle_*.mkv) sont supprimés après assemblage. - Fichiers temporaires orphelins : en cas d'interruption, les intermédiaires peuvent rester dans le répertoire de la source. Les supprimer manuellement si besoin.
- HDR10+ et conteneur source :
hevc_mp4toannexbest appliqué uniquement pour les sources MP4/MOV (pas MKV) lors de l'extraction HDR10+ parhdr10plus_parser. --animationnon fonctionnel : le flag est parsé mais n'a pas d'effet (tune=0 est utilisé pour tous les contenus). Conservé pour compatibilité future.