FULL Vibecoded App for Proof of Concept - no human code, only human prompts and eyes.
Interface graphique pour préparer des fichiers vidéo, remuxer sans perte, réencoder avec ffmpeg, et fusionner des métadonnées Dolby Vision / HDR10+.
Cette documentation correspond à Mediarecode v2.0.0.
- Vue rapide
- Installation
- Windows - Version .exe uniquement
- Distribution
- Interface et usage
- Thèmes
- Localisation
- Configuration
- Workflows
- Outils externes
| Outil | Usage | Qualité |
|---|---|---|
| Conteneur & Encodage | sélectionner les pistes, les réordonner, éditer langue/titre/flags, gérer titre/tags/chapitres/pièces jointes, enrichir les tags via TMDB/IMDb, puis copier ou réencoder | copie = sans perte, encodage = avec recompression |
| Fusion DoVi / HDR10+ | injecter les métadonnées HDR d'un fichier source dans le flux vidéo HEVC d'un autre fichier | sans perte |
Les panneaux Remuxage et Encodage forment un seul workflow. Le panneau Remuxage prépare le conteneur ; le panneau Encodage décide comment traiter la vidéo et l'audio.
Drag-and-drop global : n'importe quel fichier média peut être déposé directement sur la fenêtre principale, quelle que soit la page active. Les formats sources supportés sont centralisés dans core/file_types.py (MKV, MP4, MOV, M4V, AVI, TS, M2TS, WEBM, HEVC brut, SRT, etc.).
Ouverture système : l'application se déclare comme candidate dans les menus "Ouvrir avec..." sur Linux (AppImage), Windows (.exe) et macOS (.app), sans devenir l'application par défaut. Quand elle est lancée avec un fichier, celui-ci est chargé automatiquement comme source.
- Python 3.10+
setup.py installe ensuite tous les autres prérequis pour Windows, Linux Fedora / RHEL, Linux Debian / Ubuntu et macOS, y compris PySide6 et les outils externes nécessaires.
Depuis les releases, récupérer le binaire associé à votre OS.
AppImage Linux : un gestionnaire type Gear Lever est recommandé pour maintenir les applications à jour. L'appimage AllInc inclue toutes les dépendances.
| Cible | Binaire |
|---|---|
| AppImage Linux | Mediarecode-x86_64_allinc-.AppImage+dist/releases/Mediarecode-x86_64_allinc-.AppImage.zsync` |
| Package macOS natif | Mediarecode-<version>.dmg |
| Installateur Windows | dist/releases/Mediarecode-Setup-<version>.exe |
| Release Homebrew Linux/macOS (preview) | brew tap Hydro74000/mediarecode && brew install mediarecode |
git clone <url-du-depot>
cd mediarecodeLe script setup.py installe automatiquement :
| Catégorie | Installé par setup.py |
|---|---|
| Dépendance Python | PySide6 |
| Outils système | ffmpeg, ffprobe, mediainfo |
| Outils GitHub | dovi_tool, hdr10plus_tool |
| Notes plateforme | Debian/Ubuntu via apt, Fedora/RHEL via dnf, macOS via Homebrew, Windows via winget + binaires locaux |
setup.pyrenseigneconfig.iniavec les chemins détectés.
Emplacement deconfig.ini: Linux/macOS~/.config/mediarecode/config.ini(XDG), Windows dev./config.ini, Windows packagé%APPDATA%\mediarecode\config.ini.
| Plateforme | Commande | Détails |
|---|---|---|
| Linux Debian / Ubuntu | python3 setup.py |
installe ffmpeg, mediainfo via apt, puis dovi_tool et hdr10plus_tool depuis GitHub |
| Linux Fedora / RHEL | python3 setup.py |
active RPM Fusion si nécessaire, installe ffmpeg, mediainfo via dnf, puis les outils GitHub |
| macOS | python3 setup.py |
installe ffmpeg, mediainfo via Homebrew, puis dovi_tool et hdr10plus_tool |
| Windows | py setup.py |
installe ffmpeg et mediainfo via winget, place dovi_tool et hdr10plus_tool dans mediarecode\tools, puis renseigne config.ini avec les chemins détectés |
Options utiles du script :
| Option | Effet |
|---|---|
--dry-run |
affiche les actions sans les exécuter |
--no-github |
n'installe pas dovi_tool ni hdr10plus_tool |
--prefix PATH |
change le dossier d'installation des binaires GitHub |
--force |
relance les installations et régénère les chemins Windows dans config.ini |
eac3to est optionnel et non installable automatiquement. Il reste utile sous Windows pour certains traitements audio avancés.
python3 main.pySous Windows, utilisez py main.py.
Une distribution Homebrew est prévue pour Linux et macOS via le tap Hydro74000/mediarecode.
brew tap Hydro74000/mediarecode
brew install mediarecodeSur Linux, la formule installe l’AppImage all-inclusive. Sur macOS, elle installe Mediarecode.app, déclare ffmpeg et mediainfo comme dépendances Homebrew, et embarque dovi_tool / hdr10plus_tool.
Cette notice ne concerne que les lancement depuis Mediarecode.exe
Le lancement via python (py main.py) n'est pas concerné.
Sous Windows, les bibliothèques utilisateur comme Videos, Documents, Pictures et dossiers similaires peuvent être protégées par Windows Security via Controlled Folder Access.
Quand cette protection est active, Mediarecode peut être empêché d'écrire directement dans ces dossiers, même si :
- le dossier existe ;
- vous pouvez y accéder manuellement depuis l'Explorateur ;
- le chemin affiché dans l'application est correct.
Symptômes fréquents :
- popup Sécurité Windows indiquant que
mediarecode.exeou un outil commeffmpeg.exea été bloqué ; - erreur
No such file or directorylors d'un export versVideosouDocuments; - succès de l'export vers un autre dossier non protégé, comme
Desktopou%TEMP%.
Au premier setup Windows, Mediarecode peut proposer d'ajouter ses exécutables à l'allowlist de Windows Security afin de pouvoir enregistrer directement dans ces bibliothèques protégées. Cette exception concerne l'application elle-même et ffmpeg, l'outil qui écrit effectivement les fichiers de sortie.
Sans cette exception, les exports directs vers Videos, Documents, Pictures, etc. peuvent rester bloqués.
Si vous refusez l'exception ou si vous devez la configurer manuellement :
- Ouvrez Sécurité Windows.
- Allez dans Protection contre les virus et menaces.
- Ouvrez Protection contre les ransomwares puis Gérer la protection contre les ransomwares.
- Entrez dans Autoriser une application via l'accès contrôlé aux dossiers.
- Ajoutez
mediarecode.exe. - Si nécessaire, ajoutez aussi
ffmpeg.exe.
Après ajout à l'allowlist, redémarrez Mediarecode avant de retester un export vers Videos ou Documents.
L'application peut également être distribuée sous forme de binaire autonome via package.py.
Les artefacts sont toujours déposés dans dist/releases/.
| Cible | Commande | Artefact produit |
|---|---|---|
| AppImage Linux | python3 package.py --allinc |
dist/releases/Mediarecode-x86_64.AppImage + dist/releases/Mediarecode-x86_64.AppImage.zsync |
| Package macOS natif | python3 package.py --dmg |
Mediarecode.app + dist/releases/Mediarecode-<version>.dmg |
| Release Homebrew Linux/macOS | workflow Release Homebrew packages |
AppImage Linux all-inclusive + archive macOS + mediarecode.rb |
| Package Windows (natif + MSIX) | py package.py --msix |
dist/releases/Mediarecode.msix |
| Soumission Microsoft Store | py package.py --msix --msixupload --store-config packaging/msix_store.json |
dist/releases/Mediarecode.msixupload |
| Installateur Windows cross (depuis Linux) | python3 package.py --windows |
dist/releases/Mediarecode-Setup.exe via Wine + NSIS |
--allinc est requis sur Linux : il intègre toutes les dépendances dans l'AppImage et génère le fichier .zsync associé pour les mises à jour différentielles.
Le workflow GitHub Windows de release publie désormais l’installateur NSIS (.exe) dans les releases GitHub.
Le workflow Build Windows Store upload est séparé, manuel, et ne publie rien dans les releases. Il sert uniquement à produire un .msixupload pour Partner Center.
Pour une vraie soumission Microsoft Store, il faut renseigner l’identité exacte réservée dans Partner Center :
- copier
packaging/msix_store.example.jsonverspackaging/msix_store.json - remplacer
identityetpublisherpar les valeurs de la page Product identity dans Partner Center - sur GitHub Actions, exposer ces mêmes valeurs via
WINDOWS_MSIX_IDENTITY,WINDOWS_MSIX_PUBLISHER,WINDOWS_MSIX_PUBLISHER_DISPLAY_NAMEetWINDOWS_MSIX_DESCRIPTION
Le dépôt peut générer l’artefact de soumission, mais il ne peut pas inventer à ta place les valeurs Partner Center ni les captures/listings Store.
Important : le workflow Store upload reste distinct du workflow release. Les releases GitHub ne contiennent donc plus de MSIX.
Si makeappx.exe ou signtool.exe sont absents, le build Windows tente d’installer le SDK requis avant de packager. Un override explicite reste possible via MEDIARECODE_WINDOWS_SDK_INSTALLER ou MEDIARECODE_WINDOWS_SDK_WINGET_ID.
Sous Windows packagé, le lancement de l’application rejoue automatiquement setup.py au premier démarrage après installation ou mise à jour, afin de réinstaller les dépendances externes manquantes et de régénérer les chemins dans config.ini.
Options utiles de package.py :
| Option | Effet |
|---|---|
--allinc |
intègre toutes les dépendances dans l'AppImage et génère le .zsync (Linux) |
--dmg |
sur macOS natif, produit un .dmg distribuable depuis Mediarecode.app |
--msix |
produit un package MSIX sur Windows natif, signé si les variables MEDIARECODE_MSIX_* sont définies |
--msixupload |
génère un .msixupload pour Partner Center à partir du package MSIX |
--store-config PATH |
charge les métadonnées Store/MSIX depuis un JSON dédié |
--windows |
cross-compile un installateur Windows depuis Linux via Wine + NSIS |
--skip-wine |
réutilise dist/mediarecode-win/ existant (saute l'étape Wine/PyInstaller) |
--clean |
nettoie tous les artefacts de build (build/, dist/, .wine_build/, *.AppImage…) |
Le tableau de bord affiche :
- l'état des outils externes détectés
- les dossiers configurés (travail, sortie, app data)
- les encodeurs logiciels vus par
ffmpeg -encoders - les encodeurs matériels réellement testés au runtime (
NVENC,AMF,VAAPI,QSV) - les plans d'encodage et badges utiles pour visualiser plus clairement les traitements prepares
Les encodeurs matériels ne sont pas marqués disponibles simplement parce qu'ils apparaissent dans
ffmpeg. L'application lance un probe réel pour confirmer qu'ils fonctionnent. Les probes sont exécutés en parallèle pour minimiser le délai au démarrage.
Le workflow unifié permet de :
- ajouter une ou plusieurs sources MKV / MP4 / SRT
- inspecter vidéo, audio, sous-titres, chapitres, pièces jointes et tags MKV
- activer, exclure et réordonner les pistes
- éditer langue, titre et flags de chaque piste
- créer des variantes audio indépendantes depuis l'onglet Encodage, sans modifier la piste d'origine
- réordonner ou supprimer ces variantes sans perdre leur lien avec le workflow
- visualiser dans le panel remux le codec et le bitrate cibles lorsqu'une piste audio sera réencodée
- extraire une piste de sous-titre depuis le menu contextuel du tableau des pistes
- définir le titre du conteneur, les balises globales, les chapitres et les pièces jointes
- ouvrir une fenêtre de recherche TMDB depuis le panneau balises pour rechercher film/série (préremplissage auto depuis titre/nom de fichier)
- détecter automatiquement les motifs de série (
SxxExx,x) pour préremplir saison/épisode et positionner la recherche sur Séries si pertinent - injecter les métadonnées TMDB dans les tags MKV (
DATE_RELEASED,GENRE,DIRECTOR,CAST,SUBTITLE,SYNOPSIS,COUNTRY,URL,DESCRIPTION,COLLECTION,SEASON,EPISODE) - préparer une cover TMDB en mode différé (URL + nom de fichier) ; le téléchargement réel est fait au lancement du workflow
- remplacer automatiquement le titre du conteneur par le titre formaté TMDB lors de la validation (film :
Titre (Année), série :Titre - SxxExx - Titre épisode) - choisir pour chaque piste audio un mode
copy,aac,eac3ouflac - definir plusieurs traitements video lorsqu'un projet demande une preparation multi-pistes plus fine
- choisir pour la vidéo
copy,libx265,libx264,libsvtav1,NVENC,AMF,VAAPIouQSV— avec support complet HEVC, H.264 et AV1 sur chaque famille matérielle - presets dédiés par famille matérielle :
NVENC_PRESETS(p1-p7 + slow/medium/fast/hp/hq),VAAPI_PRESETS(compression_level 0-7),QSV_PRESETS(veryslow → veryfast),AMF_PRESETS(quality/balanced/speed) - offload matériel complet : décodage GPU activé automatiquement quand un encodeur matériel compatible est sélectionné (
cudapour NVENC,qsvpour QSV,vaapipour VAAPI,d3d11vapour AMF Windows) — le CPU n'est plus sollicité pour le décodage en chemin pur hardware - configuration VAAPI optimisée :
rc_mode CQP/VBRselon le mode qualité,compression_levelexposé via preset,async_depth 4pour maximiser le pipeline GPU - precheck
force-8bitpour les cibles H.264 afin d'eviter certains chemins incompatibles - backend de remux nominal :
ffmpeg
Modes d'exécution :
| Condition | Mode | Outils utilisés |
|---|---|---|
vidéo en copy, audio en copy, aucune transformation HDR |
Remuxage pur | ffmpeg (langues BCP47 via tag language, purge language-ietf, chapitres, tags globaux, pièces jointes, champ Muxing Application) |
| tout autre cas | Encodage | ffmpeg en passe de sortie unique (encodage/remux final + chapitres, tags, langue/titre de pistes, Muxing Application) |
Les fichiers SRT peuvent être ajoutés comme sources séparées de sous-titres. Ils sont détectés automatiquement et intégrés dans le remux final avec le format correct (srt).
Backend remux ffmpeg (par défaut) :
- sortie limitée à
MKV - écrit la langue de piste en BCP47 sur
language(ex.fr-FR) et purge le champ legacylanguage-ietfpour éviter les doublons incohérents - corrige au besoin les tags de langue Matroska en post-action, sans repasser par MKVToolNix
- permet la recopie ou l'édition des chapitres
- permet d'écrire les tags globaux choisis
- permet de recopier les pièces jointes source sélectionnées et d'ajouter des fichiers externes (cover incluse)
- peut générer un fichier
.nfoMediaInfo à côté du MKV final après un remux ou un encodage réussi - télécharge la cover TMDB différée juste avant l'exécution (dans le dossier temporaire du process), puis nettoie ce dossier en fin de run
- purge explicitement les balises techniques source
ENCODERetCREATION_TIMEavant écriture des métadonnées de sortie - n'écrit plus le tag libre
MUXING_APPLICATIONvia-metadata - applique un patch binaire post-action (sans MKVToolNix) sur le header Matroska pour écrire MuxingApp (
0x4D80) à la valeur uniqueMediarecode {version}; WritingApp (0x5741) reste intact
Limites connues du backend remux ffmpeg :
- pas de support des structures XML avancées de tags Matroska (cibles hiérarchiques fines)
- pas d'édition du flag Matroska
track-enabled(non exposé par FFmpeg) - la réécriture post-action reconstruit l'EBML du header si la valeur MuxingApp est plus longue que le champ existant ; en cas d'échec, le patch est ignoré avec warning
Les options HDR disponibles côté encodage sont :
- injection de métadonnées HDR10 statiques
- tone mapping HDR vers SDR
- copie DoVi / HDR10+ depuis la source avec workflow multi-étapes
Ergonomie du panneau :
- aperçu cover cliquable avec modale zoom plein écran (cover TMDB, cover Matroska extraite via
core/matroska_attachment_extractor.py, pièces jointes image) - barre de progression à rattrapage exact : tant que
ffmpeg -progressn'émet pas encoreout_time, la progression est estimée viaframe=et le nombre total d'images du fichier source ; dès queout_timedevient disponible, la valeur exacte prend le relais - progression "la plus lente" pour les preparations video multi-pistes, avec suivi plus detaille par traitement disponible
- suppression de source accélérée via suivi incrémental (pas de rescan global à chaque retrait)
- covers TMDB cliquables dans les résultats de recherche (aperçu grand format avant validation)
Ce panneau prend :
- Film 1 : la vidéo cible à enrichir (
.mkvou.hevc) - Film 2 : la source HDR contenant Dolby Vision et/ou HDR10+ (
.mkvou.hevc)
Règles importantes :
- Film 1 et Film 2 doivent contenir de la vidéo HEVC
- Film 2 doit contenir Dolby Vision et/ou HDR10+
- l'écart de frame count doit être <= 4 images
- le remux final conserve l'audio et les sous-titres de Film 1
Le workflow UI Fusion DoVi/HDR10+ est désormais FFmpeg-only pour l'extraction HEVC et le remux final (plus de dépendance MKVToolNix dans ce panneau).
Profils Dolby Vision proposés :
| Profil | Effet |
|---|---|
| Profile 8.1 | normalise l'injection en profil 8.1, recommandé pour les remux UHD |
| Mode 0 | conserve le profil source sans réécriture |
Le panneau Paramètres est un éditeur complet de config.ini intégré à l'interface. Il regroupe :
- Interface : thème (
dark/light), langue, nombre maximal de lignes de log, panneau affiché au démarrage - Chemins : dossier de travail, dossier de sortie, dossier app data
- Remux : backend
ffmpeg(nominal) - Outils externes : chemins explicites pour chaque outil (
ffmpeg,ffprobe,mediainfo,dovi_tool,hdr10plus_tool, etc.) - Encodage : profil DoVi, compat-id, buffer RAM
- Logs : niveau de verbosite, journal fichier, rotation et capture des sorties outils dans les options
- Métadonnées : auth TMDB via clé API v3 (
tmdb_api_key) ou token Bearer v4 (tmdb_bearer_token), génération optionnelle de.nfo(generate_nfo)
Les changements sont appliqués section par section ou en une seule fois via le bouton Sauvegarder toute la configuration. Un rechargement depuis config.ini est possible sans redémarrer l'application.
L'application supporte deux thèmes visuels, sélectionnables dans le panneau Paramètres :
| Thème | Description |
|---|---|
dark (défaut) |
fond sombre, accents bleus |
light |
fond clair, contrastes adaptés |
Le changement de thème est appliqué immédiatement sans redémarrage.
L'interface est traduite en français et anglais. La langue active est détectée automatiquement depuis la locale système au premier lancement, puis peut être modifiée dans le panneau Paramètres.
Les textes de l'application sont centralisés dans locales.json.
Les tags de langue saisis (pistes audio, sous-titres) utilisent des codes RFC 5646 / BCP47 (ex. fr, fr-FR, en-US). Les libellés non standards comme French ne sont pas acceptés.
L'application résout ses paramètres dans cet ordre :
config.ini(Linux/macOS :~/.config/mediarecode/config.ini; Windows dev : racine du projet ; Windows packagé :%APPDATA%\mediarecode\config.ini)- les valeurs persistées par l'interface (
QSettings) - les valeurs par défaut internes
Sous Windows, setup.py et le démarrage de l'application peuvent auto-détecter les outils et renseigner automatiquement la section [tools] de config.ini.
| Paramètre | Défaut | Description |
|---|---|---|
work_dir |
/tmp/mediarecode_work sur Linux/macOS, %TEMP%\mediarecode_work sur Windows |
dossier des fichiers temporaires |
output_dir |
dossier Vidéos de l'OS | dossier de sortie par défaut |
theme |
dark |
thème visuel (dark ou light) |
language |
auto-détecté | langue de l'interface (fra ou eng) |
startup_panel |
dashboard |
panneau ouvert au démarrage (dashboard, container, encoding, dovi, settings) |
backend (section [remux]) |
ffmpeg |
backend de remux (ffmpeg) |
tmdb_api_key |
vide | clé API TMDB v3 utilisée par la recherche IMDb/TMDB |
tmdb_bearer_token |
vide | token Bearer TMDB v4 (utilisé si tmdb_api_key est vide, ou via MEDIARECODE_TMDB_BEARER_TOKEN) |
generate_nfo |
true |
génère un fichier .nfo MediaInfo à côté du MKV final après workflow réussi |
ram_buffer_enabled |
true |
autorise l'usage de /dev/shm pour les HEVC intermédiaires si disponible |
ram_buffer_threshold_pct |
15 |
pourcentage minimal de RAM libre à conserver pour activer ce buffer |
Le workflow d'encodage peut placer les fichiers HEVC temporaires en RAM pour limiter les E/S disque.
Conditions d'utilisation :
ram_buffer_enabled = true- un répertoire RAM-backed disponible et inscriptible (
/dev/shm) - après allocation estimée, la RAM libre reste au-dessus du seuil
ram_buffer_threshold_pct
Comportement :
- si toutes les conditions sont remplies, les intermédiaires HEVC sont écrits en RAM
- sinon, fallback automatique vers le dossier temporaire sur disque (
work_dirou temporaire système) - la décision est réévaluée à chaque allocation
Limite Windows :
- l'application ne s'appuie pas sur un backend RAM standard sur Windows
- le chemin par défaut reste donc disque pour garantir un comportement stable et compatible avec les outils externes (
ffmpeg,dovi_tool,hdr10plus_tool) qui attendent des chemins de fichiers classiques
Vous pouvez définir explicitement dans config.ini :
ffmpeg,ffprobemediainfodovi_tool,hdr10plus_tooleac3to
Exemple :
[paths]
output_dir = /mnt/nas/videos
[tools]
ffmpeg = /opt/ffmpeg/bin/ffmpeg
dovi_tool = /usr/local/bin/dovi_tool
[remux]
backend = ffmpeg
[ui]
theme = light
language = eng
startup_panel = container
[metadata]
tmdb_api_key = <VOTRE_CLE_API_TMDB_V3>
tmdb_bearer_token = <VOTRE_TOKEN_BEARER_TMDB_V4>
generate_nfo = trueflowchart TD
A["Sources MKV, MP4 ou SRT"] --> B["Inspection via ffprobe"]
B --> C["Edition conteneur dans RemuxPanel"]
C --> D["Options video, audio et HDR dans EncodePanel"]
D --> E{"Video copy<br/>Audio copy<br/>Aucune transformation HDR"}
E -->|Oui| R0["WORKFLOW TYPE - REMUX"]
R0 --> R1["Workflow remux FFmpeg"]
R1 --> Z["Sortie MKV"]
E -->|Non| E0["WORKFLOW TYPE - ENCODE"]
E0 --> E1["Workflow encode FFmpeg"]
E1 --> Z
flowchart TD
A["WORKFLOW TYPE - REMUX"] --> B["STEP 1 - Validation configuration"]
B --> C["STEP 2 - Preparation workspace, attachments et cover TMDB"]
C --> D["STEP 3 - Analyse mapping pistes + pre-scan de risque<br/>extraction attached_pic si present"]
D --> E{"Risque multi-source<br/>strict interleave"}
E -->|Oui| F["STEP 4 - Synchronisation timeline multi-source<br/>FIFO, Named Pipe ou fallback fichier"]
E -->|Non| G["STEP 4 - Synchronisation timeline non requise"]
F --> H["STEP 5 - Chapitres : override FFMetadata ou copie source"]
G --> H
H --> I["STEP 6 - Construction de la commande ffmpeg remux"]
I --> J["STEP 7 - Execution du remux ffmpeg"]
J --> K["STEP 8 - Post-action : Patch MuxingApp + Cleanup"]
K --> L["Sortie MKV"]
flowchart TD
A["WORKFLOW TYPE - ENCODE"] --> B["STEP 1 - Validation configuration"]
B --> C["STEP 2 - Preparation workspace et attachments"]
C --> D["STEP 3 - Normalisation des options HDR dynamiques"]
D --> E["STEP 4 - Routage du workflow"]
E --> F{"Injection fichier<br/>DoVi ou HDR10+<br/>necessaire"}
F -->|Oui| K["STEP 5 - Extraction des metadata dynamiques<br/>DoVi et ou HDR10+"]
K --> L["STEP 6 - Encodage video seule vers enc.hevc"]
L --> M["STEP 7 - Injection HDR10+ et ou DoVi"]
M --> N["STEP 8 - Encapsulation timeline video injectee"]
N --> O["STEP 9 - Reconstruction finale MKV<br/>Sync timeline si risque detecte"]
F -->|Non| G["STEP 5 - Construction de la commande ffmpeg<br/>sortie directe"]
G --> H["STEP 6 - Preparation sync/remap + commande(s)"]
H --> P{"Quality mode = SIZE"}
P -->|Oui| Q["STEP 7 - Execution ffmpeg en 2 passes<br/>sync timeline si risque detecte"]
P -->|Non| R["STEP 7 - Execution ffmpeg en single pass<br/>sync timeline si risque detecte"]
O --> Z["Sortie MKV"]
Q --> Z
R --> Z
Lecture rapide :
- Les demandes
copy_hdr10plusetcopy_dvsont evaluees apres normalisation source. - L'injection "fichier" n'est requise que si une copie DoVi ou HDR10+ reste demandee et que la video n'est pas en
copy. - Si
codec=copyavec injection desactivee, le workflow reste en sortie directe ffmpeg (STEP 5-7), y compris si l'audio est reencode. - Le 2-pass n'existe que dans le chemin direct (
quality_mode=SIZE,codec!=copy). - Le chemin injection utilise
enc.hevc, puisenc_wrapped.mkv, puis un remux final ffmpeg (STEP 5-9). - La sync timeline multi-source est activee uniquement en cas de risque detecte par pre-scan ffprobe ; sinon le flux reste en chemin direct.
- En mode TMDB, la cover est resolue en URL lors de la recherche puis telechargee uniquement au lancement du workflow.
flowchart TD
A([Film 1 + Film 2]) --> B[Validation<br/>fichiers, extensions, outils,<br/>HEVC Film 1/2, HDR dans Film 2]
B --> C[Comparaison frame count<br/>tolerance <= 4]
C --> D{Film 2 = MKV<br/>et DoVi + HDR10+ ?}
D -->|Oui| E1[Phase 1 parallel<br/>extract HEVC Film 1 si MKV<br/>+ extract HEVC Film 2]
E1 --> E2[Phase 2 parallel<br/>extract RPU + HDR10+<br/>depuis film2.hevc]
D -->|Non| E3[Extraction parallel directe<br/>HEVC Film 1 si MKV<br/>+ RPU/HDR10+ depuis Film 2]
E2 --> F
E3 --> F
F{DoVi present ?}
F -->|Oui| G[dovi_tool inject-rpu]
F -->|Non| H
G --> H
H{HDR10+ present ?}
H -->|Oui| I[hdr10plus_tool inject]
H -->|Non| J
I --> J
J{DoVi present ?}
J -->|Oui| K[Verification RPU frames]
J -->|Non| L
K --> L
L[ffmpeg final<br/>video injectee + audio/subs/metadata Film 1<br/>map_metadata/map_chapters] --> M[Nettoyage]
M --> N([Sortie MKV])
flowchart TD
A([Fichier a inspecter]) --> B{Fichier accessible ?}
B -->|Non| X[Arret avec erreur]
B -->|Oui| C[Analyse de base avec ffprobe]
C --> D{Analyse exploitable ?}
D -->|Non| Y[Arret avec erreur]
D -->|Oui| E[Creation de la fiche media<br/>en une seule lecture ffprobe<br/>pistes chapitres attachments<br/>infos globales et tags]
E --> F[Tentative d enrichissement mediainfo<br/>en une seule lecture<br/>frame count et details HDR DoVi]
F --> H{Frame count encore absent ?}
H -->|Oui| H1[Nouvelle tentative simple<br/>via mediainfo]
H -->|Non| I
H1 --> I
I --> J{Fichier Matroska ou WebM ?}
J -->|Oui| J1[Enrichissement MKV<br/>langues detaillees language-ietf<br/>et comptage des tags]
J -->|Non| K
J1 --> K[Normalisation des langues<br/>pour obtenir des valeurs coherentes]
K --> L{Video principale presente ?}
L -->|Non| Z[Fiche finale retournee]
L -->|Oui| M[Detection HDR]
M --> N{Metadonnees HDR visibles<br/>directement dans ffprobe ?}
N -->|Oui| Q[Determination du type HDR]
N -->|Non ou incomplet| O[Essai d enrichissement HDR<br/>avec mediainfo]
O --> P{Reponse suffisante ?}
P -->|Oui| Q
P -->|Non| R[Dernier recours<br/>analyse plus fine par images]
R --> Q
Q --> S[Classement final<br/>Dolby Vision + HDR10+<br/>Dolby Vision<br/>HDR10+<br/>HDR10<br/>HLG<br/>SDR]
S --> T[Mise a jour de la video principale]
T --> Z[Fiche finale retournee<br/>prete pour affichage et workflows]
| Fiche media produite par l inspection |
|---|
| Identite generale : chemin du fichier, format du conteneur, duree totale, taille, debit global, titre du conteneur, tags globaux utiles. Pistes video : index, codec, resolution, framerate, profondeur de couleur, infos colorimetriques, type HDR detecte, details Dolby Vision si disponibles, langue, titre, duree, debit. Pistes audio : index, codec, nombre de canaux, layout stereo/5.1/7.1, frequence d echantillonnage, debit, langue, titre, duree, indicateurs utiles comme Atmos ou DTS:X quand ils peuvent etre deduits.Pistes de sous-titres : index, codec, langue, titre, drapeaux forced et default.Chapitres : liste des chapitres avec position temporelle et nom. Attachments : cover, polices et autres ressources embarquees avec nom, type MIME, taille si disponible, et indication attached_pic pour les images de couverture integrees comme flux video.Enrichissement MKV/WebM : comptage des tags globaux, recuperation prioritaire des langues detaillees language-ietf quand elles existent, avec repli sur language sinon.Normalisation finale : harmonisation des langues vers une forme plus coherente et exploitable dans l interface et les workflows suivants. Enrichissement optionnel via mediainfo : frame count si disponible, confirmation ou enrichissement des metadonnees HDR, et details Dolby Vision supplementaires quand ffprobe ne les expose pas assez. |
| Outil | Rôle principal |
|---|---|
ffprobe |
analyse des flux, chapitres et métadonnées |
mediainfo |
frame count et informations HDR fines |
ffmpeg |
encodage, remux, copie de flux, extraction de sous-titres, écriture metadata/chapitres/tags, patch binaire MuxingApp |
dovi_tool |
extraction, injection et vérification Dolby Vision |
hdr10plus_tool |
extraction et injection HDR10+ |
nvidia-smi |
fallback de détection NVENC sous Linux |
Mediarecode v2.0.0