docs: mise à jour README et CLAUDE.md pour AV1+Opus+MKV

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-22 23:50:36 +01:00
parent ef34ce82eb
commit b99823f24d
2 changed files with 69 additions and 7 deletions

60
CLAUDE.md Normal file
View File

@@ -0,0 +1,60 @@
# 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
```bash
./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
- `ffmpeg` et `ffprobe` — 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 final
- `hdr10plus_parser` (binaire inclus) — extraction/injection des métadonnées HDR10+
## Architecture
Fichier unique : `vid_convert.py`. Flux d'exécution séquentiel :
1. **`get_infos(file)`** — ffprobe JSON → métadonnées vidéo/audio/sous-titres, détection HDR10+, Dolby Vision, conteneur source
2. **`cropping(file, infos)`** — cropdetect FFmpeg → suppression des bandes noires
3. **`volume_audio(file, infos)`** — volumedetect FFmpeg → ajustement par piste audio
4. **`find_crf(file, enc_options, hdr)`** — ab-av1 crf-search → CRF optimal pour VMAF 96
5. **`extract_subs(file, track, lang)`** — extraction des pistes de sous-titres
6. **`convert_audio(...)`** — encodage libopus VBR par piste (128k/320k/450k selon canaux)
7. **`convert_video(...)`** — encodage libsvtav1 (preset=3, tune=0), HDR10/HDR10+ via `-svtav1-params`
8. **`create_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` + `vidstabtransform` en deux passes
## Gotchas
- **libsvtav1 + libopus requis** : le binaire FFmpeg doit être compilé avec `--enable-libsvtav1` et `--enable-libopus`. Vérifier avec `ffmpeg -codecs | grep -E 'svt|opus'`.
- **ab-av1 dans le PATH** : `ab-av1 crf-search` doit ê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_mp4toannexb` est appliqué uniquement pour les sources MP4/MOV (pas MKV) lors de l'extraction HDR10+ par `hdr10plus_parser`.
- **`--animation` non fonctionnel** : le flag est parsé mais n'a pas d'effet (tune=0 est utilisé pour tous les contenus). Conservé pour compatibilité future.

View File

@@ -1,26 +1,28 @@
# vid_convert # vid_convert
vid_convert est un script qui utilise ffmpeg pour convertir des vidéos au vid_convert est un script qui utilise ffmpeg pour convertir des vidéos au
format [H.265](https://fr.wikipedia.org/wiki/H.265/HEVC), avec un audio en format [AV1](https://fr.wikipedia.org/wiki/AV1) (libsvtav1), avec un audio en
[AAC-LC](https://fr.wikipedia.org/wiki/Advanced_Audio_Coding). [Opus](https://fr.wikipedia.org/wiki/Opus_(codec_audio)).
Cela permet d'optimiser le poids du fichier sans baisse visible de Cela permet d'optimiser le poids du fichier sans baisse visible de
la qualité avec les paramètres prévus dans le script. la qualité avec les paramètres prévus dans le script.
Le but est de faire un script qui enchaine les différentes opérations, sans Le but est de faire un script qui enchaine les différentes opérations, sans
laisser à l'utilisateur des choix ou des calculs fastidieux à faire. laisser à l'utilisateur des choix ou des calculs fastidieux à faire.
Le format de sortie est un fichier MPEG-4 (.mp4), lisible sur n'importe quel Le format de sortie est un fichier Matroska (.mkv). Le CRF optimal est
appareil (ou presque) disposant d'une puissance de décodage suffisante. déterminé automatiquement via `ab-av1 crf-search` pour atteindre un VMAF de 96.
Le format d'entrée peut être n'importe lequel connu par ffmpeg. Pour les BluRay, Le format d'entrée peut être n'importe lequel connu par ffmpeg. Pour les BluRay,
le 4K, HDR et HDR10+ sont gérés. Concernant le son, pas de prise en charge du le 4K, HDR10 et HDR10+ sont gérés. Concernant le son, pas de prise en charge du
canal Atmos, mais le multi-canal (5.1, 7.1, ...) est géré. Toutes les pistes canal Atmos, mais le multi-canal (5.1, 7.1, ...) est géré. Toutes les pistes
(vidéo, audios et sous-titres) sont conservées. (vidéo, audios et sous-titres) sont conservées.
## Installation et dépendances ## Installation et dépendances
- [Python](https://www.python.org/) (>= 3.5) - [Python](https://www.python.org/) (>= 3.5)
- [ffmpeg](https://ffmpeg.org/) - [ffmpeg](https://ffmpeg.org/) compilé avec `libsvtav1` et `libopus`
- [hdr10plus_tool](https://github.com/quietvoid/hdr10plus_tool) - [ab-av1](https://github.com/alexheretic/ab-av1) — sélection automatique du CRF
- [MkvToolNix](https://mkvtoolnix.download/) (`mkvmerge`) — assemblage du conteneur MKV
- `hdr10plus_parser` (binaire inclus) — extraction/injection des métadonnées HDR10+
## Utilisation ## Utilisation