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 NVencC en option pour NVidia), et fusionner des métadonnées Dolby Vision / HDR10+.
Cette documentation correspond à Muxiveo v3.1.0.
- Vue rapide
- Installation
- Interface et usage
- Thèmes
- Localisation
- Configuration
- Workflows
- Outils externes
- Troubleshooting windows
| 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 | Muxiveo-x86_64_allinc-.AppImage+dist/releases/Muxiveo-x86_64_allinc-.AppImage.zsync` |
| Package macOS natif | Muxiveo-<version>.dmg |
| Installateur Windows | dist/releases/Muxiveo-Setup-<version>.exe |
| Release Homebrew Linux/macOS (preview) | brew tap Hydro74000/muxiveo && brew install muxiveo |
git clone <url-du-depot>
cd MuxiveoLe 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/muxiveo/config.ini(XDG), Windows dev./config.ini, Windows packagé%APPDATA%\muxiveo\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 Muxiveo\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/Muxiveo.
brew tap Hydro74000/Muxiveo
brew install MuxiveoSur Linux, la formule installe l’AppImage all-inclusive. Sur macOS, elle installe Muxiveo.app, déclare ffmpeg et mediainfo comme dépendances Homebrew, et embarque dovi_tool / hdr10plus_tool.
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
- synchroniser automatiquement une piste audio multi-source par analyse du contenu audio, avec choix d'une piste de référence et application directe du décalage calculé
- 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).
Synchronisation audio automatisée en multi-source :
- disponible lorsqu'un projet contient des pistes audio issues d'au moins deux sources différentes
- pensée pour aligner une piste audio cible sur une source de référence, par exemple VF/VO provenant d'un autre fichier, autre édition, autre plateforme ou autre remux
- accessible depuis le bouton de synchronisation dans la ligne d'une piste audio ; Muxiveo propose alors les pistes 5.1/7.1 compatibles des autres sources comme références
- analyse le contenu réel avec
ffmpeg/ffprobe, extrait une signature depuis les canaux surround/LFE, détecte les moments clés communs entre la piste cible et les pistes de la source de référence, puis applique automatiquement l'offset signé en millisecondes - affiche l'offset dans la colonne Info (
Δt +125 ms,Δt -320 ms, etc.) et conserve cette valeur dans la configuration de remux - remet la piste de référence à
0 msquand un offset est appliqué à la cible, afin de garder une seule piste déplacée et une timeline plus lisible - échoue volontairement si la piste est trop courte, si la corrélation est trop faible, ou si les canaux disponibles ne permettent pas une analyse fiable
Cette synchronisation audio est un outil utilisateur pour calculer le bon décalage entre sources. Elle complète la synchronisation timeline interne du backend ffmpeg, qui intervient plus tard pendant l'exécution pour sécuriser le muxage multi-source et les offsets déjà définis.
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 uniqueMuxiveo {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)
Les profils permettent de réutiliser un traitement sans devoir refaire les mêmes choix à la main sur chaque fichier. Muxiveo distingue deux usages.
| Besoin | Format | Usage |
|---|---|---|
| Refaire exactement un traitement | exact-job |
CLI, preview, run, batch strict |
| Réappliquer des décisions à d'autres sources | decision-profile |
GUI low-code, CLI --profile, batch par dossier |
Un exact job contient sources, sortie et sélecteurs stricts. Il est adapté aux épisodes ou fichiers construits de la même façon.
Un decision profile ne contient ni source ni sortie : il décrit comment retrouver, choisir, renommer et ordonner les pistes sur d'autres fichiers.
Un profil décisionnel version: 1 peut couvrir :
- sélection vidéo au plus proche : résolution, HDR, HDR10, HDR10+, Dolby Vision, HLG
- sélection audio et sous-titres par type, langue, codec, canaux, titre, flags
- renommage des titres de pistes par keywords
- flags MKV : défaut, forcé, malentendant, malvoyant, original, commentaire
- ordre des pistes
- tags temporaires de pistes pour chaîner des règles
- création de variantes audio, par exemple une compatibilité AC3 depuis une piste TrueHD
Les profils GUI sont enregistrés ici :
<dossier de config muxiveo>/profiles/decision/
Dans le panneau Remux, Éditer profil ouvre une fenêtre dédiée :
- panneau gauche : groupes et règles
- panneau central : critères, actions, priorité, mode d'écriture, tags, patterns
- panneau droit : preview piste par piste
- bouton Insérer keyword sous la preview : menu par catégories pour remplir le champ actif sans afficher toute la liste en permanence
- clic droit dans un champ compatible : entrée Insérer keyword avec les mêmes catégories
- keywords affichés comme badges lorsque le champ n'est pas en cours d'édition
- critères obligatoires ou préférés : un préféré donne un bonus de priorité sans bloquer le fallback
- sélecteur pour charger un profil existant, l'éditer ou le supprimer après confirmation
Deux départs sont possibles :
- Profil vide : construire les règles à la main
- Capturer l'état courant : partir de la table de pistes actuelle puis ajuster
Les modèles disponibles couvrent les usages principaux : sélection vidéo, garder une langue, exclure commentaire, renommer, flags, ordre, variante audio et tag temporaire.
Une règle répond toujours à trois questions :
- Quelles pistes regarder ? Ce sont les critères : type, langue, codec, titre, flags, largeur, hauteur, HDR, Dolby Vision, etc.
- Combien de pistes appliquer ? C'est la portée :
best,firstouall. - Que faire sur ces pistes ? Ce sont les actions : activer, désactiver, renommer, changer la langue, écrire des flags, créer une variante audio, ou donner une priorité d'ordre.
Un critère peut être obligatoire ou préféré.
- Obligatoire : si la piste ne respecte pas ce critère, elle est exclue.
- Préféré : la piste peut quand même être choisie, mais celle qui respecte le critère marque plus de points.
Exemple : pour une piste audio française en EAC3, avec Atmos si disponible :
- langue
fr-FR: obligatoire - codec
EAC3: obligatoire - keyword préféré
{atmos}: bonus si une piste Atmos existe
Si aucune piste Atmos n'existe, Muxiveo peut quand même garder la meilleure piste française EAC3.
Les champs texte de critères acceptent une mini-syntaxe commune au GUI et au CLI :
&signifie AND|signifie OR!ouNOT(...)signifie NOT- les parenthèses fixent la priorité
Exemples :
VFQ | VFF
(VFQ | VFF) & Forced
!(Commentary | Descriptive)
NOT({flag_forced} | {flag_commentary})
EAC3 | AC3
{atmos} | {dtsx}
Les champs de critères restent combinés entre eux par AND : si vous renseignez type = audio et codec = EAC3 | AC3, la piste doit être audio et avoir l'un des deux codecs.
Pour chercher un caractère &, |, ( ou ) comme texte réel, utilisez des guillemets ou un échappement :
"A | B"
Dolby \& DTS
\(VFQ\)
! doit toucher directement l'élément exclu : !Commentary ou !(A | B) sont valides, ! Commentary ne l'est pas.
Le keyword {none} permet de chercher une valeur vide dans le champ courant. Dans le champ Flags, {none} cible les pistes sans flag actif.
Les expressions invalides bloquent la sauvegarde du profil et s'affichent dans la preview au lieu de faire planter l'éditeur.
La portée détermine combien de pistes une règle va modifier.
| Portée | Effet | Usage typique |
|---|---|---|
best |
choisit la piste qui a le meilleur score | choisir une seule vidéo, une seule VF principale, une seule VO principale |
first |
choisit la première piste compatible dans l'ordre des sources | faire confiance à l'ordre du fichier source |
all |
applique la règle à toutes les pistes compatibles | renommer toutes les pistes audio, désactiver tous les commentaires, tagger tous les sous-titres forcés |
best est le choix le plus courant pour une sélection intelligente. Le moteur additionne les points des critères compatibles : langue, codec, canaux, Atmos/DTS:X, flags, résolution, HDR, etc. S'il y a une égalité impossible à départager, le GUI le signale dans l'aperçu. Pour la vidéo, si plusieurs pistes ont exactement le même score, Muxiveo garde la première source/index.
first est plus simple : il prend la première piste compatible. C'est pratique quand les fichiers sont toujours construits pareil, par exemple “prendre la première audio française”.
all est fait pour les actions de masse. Exemple : “renommer toutes les pistes audio avec {lang_name} {codec} {channels}” ou “désactiver toutes les pistes dont le titre contient commentary”.
Si deux règles écrivent le même champ d'une même piste, Muxiveo utilise le mode d'écriture de la règle :
- Priorité : mode recommandé. La règle la plus prioritaire gagne pour le champ concerné. Les autres règles peuvent toujours écrire d'autres champs.
- Remplacer : la règle écrase la valeur déjà proposée, même si une règle plus prioritaire est passée avant.
- Compléter : la règle n'écrase pas la valeur déjà proposée. Pour un titre, elle ajoute le fragment rendu au titre déjà construit.
Une égalité de priorité avec deux valeurs différentes reste un conflit : le GUI le signale, et la CLI bloque avec un rapport JSON.
Dans l'éditeur, le nombre Priorité sert aussi à savoir quelle règle passe avant une autre. Plus le nombre est grand, plus la règle est prioritaire : 999 passe avant 1.
Le moteur trie les règles du plus grand au plus petit. Si vous utilisez les groupes, la priorité du groupe compte d'abord, puis la priorité de la règle :
priorité effective = priorité du groupe, puis priorité de la règle
Par exemple, une règle priorité 1 dans un groupe priorité 300 passe avant une règle priorité 999 dans un groupe priorité 200, car le groupe est plus prioritaire.
En mode Priorité, le plus grand gagne aussi pour les conflits d'écriture. Une règle priorité 999 peut écrire un titre en premier ; si une règle priorité 1 passe ensuite et propose un autre titre en mode Priorité, elle ne remplace pas le titre déjà choisi. Les boutons de déplacement des règles ajustent cette priorité.
Le mode Remplacer est différent : c'est un choix volontaire pour forcer une exception. Une règle moins prioritaire en mode Remplacer peut donc écraser une valeur écrite par une règle plus prioritaire.
Exemple :
- règle A, priorité 100 : titre =
French DDP 5.1 - règle B, priorité 50 : titre =
VF - en mode Priorité, le titre reste
French DDP 5.1 - en mode Remplacer sur la règle B, le titre devient
VF - en mode Compléter sur la règle B, le titre devient
French DDP 5.1 VF
La priorité règle donc l'ordre d'évaluation et les écritures concurrentes. Elle ne déplace pas les pistes à elle seule.
L'ordre de sortie se règle avec le modèle/action Ordre. Cette action donne une priorité d'ordre à la piste matchée :
- plus la valeur est basse, plus la piste remonte :
1sort en premier,999sort après - les pistes sans priorité d'ordre gardent leur ordre relatif
- si deux pistes ont la même priorité d'ordre, leur ordre relatif reste stable
Dans l'éditeur, le champ Ordre des actions écrit cette priorité. Si plusieurs règles donnent un ordre à la même piste, les priorités de groupe puis de règle déterminent la valeur gardée. Au moment du traitement, la table réordonnée est exportée avec les entry_id des pistes pour distinguer correctement les pistes dupliquées ou variantes.
Une façon simple de construire un profil d'ordre :
| Règle | Portée | Critères | Action d'ordre |
|---|---|---|---|
| Vidéo principale | best |
type vidéo, 2160p/HDR/Dolby Vision préférés | 1 |
| Audio FR principale | best |
langue fr-FR, codec voulu, Atmos préféré |
2 |
| Audio VO principale | best |
langue en-US, codec voulu, Atmos préféré |
3 |
| Sous-titres FR forcés | all |
langue fr-FR, flag forced |
10 |
| Sous-titres FR complets | best |
langue fr-FR, non forced |
20 |
Pour ordonner proprement, séparez souvent les intentions :
- une règle choisit ou désactive les pistes
- une règle renomme les titres
- une règle donne les priorités d'ordre
Ce découpage rend l'aperçu plus lisible et évite qu'une règle fasse trop de choses à la fois.
Les keywords servent à trois choses :
- renommer une piste avec un pattern de titre
- identifier une piste dans les critères du profil, par exemple
{flag_visual_impaired}ou{codec_atmos} - compléter certains champs d'action, par exemple garder la langue courante avec
{language}
Dans les actions, !flag retire un flag MKV (default, !forced) et !tag retire un tag temporaire (vf_main, !old_tag). Les retraits de tags sont appliqués avant les ajouts de la même règle.
Un profil peut contenir des variables éditables. Le bouton Aliases de l'éditeur permet de définir des remplacements de rendu pour les keywords :
EAC3=DDP
AC3=Dolby Digital
lang_name:French=Français
codec:TRUEHD=Dolby TrueHD
Ensuite :
EAC3=DDPest un alias global, utilisable par tous les keywords renduslang_name:French=Françaisne s'applique qu'au keyword{lang_name}- un alias ciblé gagne sur un alias global
- les aliases sont insensibles à la casse et aux espaces de bord
- les aliases changent le rendu des titres et templates de sortie, pas les critères de matching
{codec_raw}garde toujours le nom technique, par exempleEAC3- les anciens profils avec
variables.codec_namesrestent lus pour compatibilité
Exemple de pattern :
{lang_name} {codec} {channels}
Avec EAC3=DDP, le titre devient French DDP 5.1.
Le keyword {lang_name} affiche le nom de langue sans région quand il s'agit de la variante d'origine, et garde la région entre parenthèses pour les variantes non standard :
| Langue | {lang_name} |
|---|---|
fr-FR |
French |
fr-CA |
French (Canada) |
pt-PT |
Portuguese |
pt-BR |
Portuguese (Brazil) |
Une action de titre peut utiliser un pattern :
{lang_name} {codec} {channels} {audio_object}
Exemples :
VF {codec} {channels}->VF DDP 5.1siEAC3=DDP, sinonVF EAC3 5.1{lang_name} {codec} {channels} {flag_forced}->French PGS Forced{lang_name} {codec_raw} {channels} {audio_object}->French EAC3 5.1 Atmos
Si une valeur manque, Muxiveo l'omet et nettoie les espaces ou séparateurs inutiles.
Keywords disponibles au premier lot :
{type} {source_index} {track_index}
{language} {lang} {lang_name} {source_language}
{title} {source_title}
{codec} {codec_raw} {codec_name} {channels} {channel_layout} {audio_object}
{atmos} {dtsx} {codec_atmos} {codec_dtsx}
{resolution} {width} {height} {hdr} {video_flags_hex}
{video_hdr} {video_hdr10} {video_hdr10plus}
{video_dolby_vision} {video_hlg} {video_sdr}
{flags} {flag_enabled} {flag_default} {flag_forced}
{flag_hearing_impaired} {flag_visual_impaired}
{flag_original} {flag_commentary}
{track_tags} {none}
Pour la vidéo, width et height sont indépendants : vous pouvez renseigner seulement la largeur, seulement la hauteur, les deux, ou aucun des deux. La profondeur couleur, quand elle est détectée, est prise en compte dans les caractéristiques techniques internes (video_flags_hex) mais n'a pas de champ dédié dans l'éditeur simple.
Exemple : pour garder une piste audio française en EAC3 et préférer Atmos si elle existe, indiquez fr-FR en langue, EAC3 en codec avec Obligatoire, puis {atmos} dans Keywords préférés.
Depuis le GUI, Appliquer profil charge un profil enregistré, affiche un aperçu, puis applique après confirmation.
En CLI :
muxiveo --cli validate --profile profil.json
muxiveo --cli preview --profile profil.json -i source.mkv --json
muxiveo --cli run --profile profil.json -i source.mkv -o sortie.mkvVous pouvez donner un chemin complet ou simplement le nom d'un profil sauvegardé dans le dossier utilisateur. L'extension .json est optionnelle : --profile BestOfAll cherchera aussi BestOfAll.json dans <dossier de config muxiveo>/profiles/decision/.
En batch dossier :
muxiveo --cli batch \
--profile profil.json \
--input-dir "Serie" \
--recursive \
--output-dir "out" \
--auto-tmdb \
--dry-run--auto-tmdb peut être ajouté aux traitements CLI pour récupérer les tags TMDB et la cover. La CLI déduit automatiquement saison/épisode depuis les noms de fichiers du type S01E02 ou 01x02. Utilisez --tmdb-id pour forcer une fiche, --no-cover pour garder les tags sans cover, et --no-attach pour ne sortir aucun attachment.
La CLI n'ouvre pas de dialogue interactif. Si un conflit ou une ambiguïté ne peut pas être résolu automatiquement, elle retourne un rapport JSON et bloque l'application.
Exporter JSON CLI produit un job exact destiné aux traitements stricts.
Il est adapté aux épisodes ou fichiers construits de la même façon :
muxiveo --cli validate --config exact-job.json
muxiveo --cli preview --config exact-job.json
muxiveo --cli run --config exact-job.json
muxiveo --cli batch --template exact-job.json --input-dir "Serie" --output-dir "out"Utilisez un exact job quand la structure des sources est stable. Utilisez un profil décisionnel quand les sources varient mais que vos décisions restent les mêmes.
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/muxiveo/config.ini; Windows dev : racine du projet ; Windows packagé :%APPDATA%\muxiveo\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/Muxiveo_work sur Linux/macOS, %TEMP%\Muxiveo_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 MUXIVEO_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 - Préparation workspace, attachments et cover TMDB"]
C --> D["STEP 3 - Analyse mapping pistes + pre-scan de risque<br/>extraction attached_pic si présent"]
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 - Exécution 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 - Préparation 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/>nécessaire"}
F -->|Oui| K["STEP 5 - Extraction des metadata dynamiques<br/>DoVi et ou HDR10+"]
K --> L["STEP 6 - Encodage vidéo seule vers enc.hevc"]
L --> M["STEP 7 - Injection HDR10+ et ou DoVi"]
M --> N["STEP 8 - Encapsulation timeline vidéo injectée"]
N --> O["STEP 9 - Reconstruction finale MKV<br/>Sync timeline si risque détecté"]
F -->|Non| G["STEP 5 - Construction de la commande ffmpeg<br/>sortie directe"]
G --> H["STEP 6 - Préparation sync/remap + commande(s)"]
H --> P{"Quality mode = SIZE"}
P -->|Oui| Q["STEP 7 - Exécution ffmpeg en 2 passes<br/>sync timeline si risque détecté"]
P -->|Non| R["STEP 7 - Exécution ffmpeg en single pass<br/>sync timeline si risque détecté"]
O --> Z["Sortie MKV"]
Q --> Z
R --> Z
Lecture rapide :
- Les demandes
copy_hdr10plusetcopy_dvsont évaluées après normalisation source. - L'injection "fichier" n'est requise que si une copie DoVi ou HDR10+ reste demandée et que la vidéo n'est pas en
copy. - Si
codec=copyavec injection désactivée, le workflow reste en sortie directe ffmpeg (STEP 5-7), y compris si l'audio est réencodé. - 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 activée uniquement en cas de risque détecté par pre-scan ffprobe ; sinon le flux reste en chemin direct.
- En mode TMDB, la cover est résolue en URL lors de la recherche puis téléchargée 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 présent ?}
F -->|Oui| G[dovi_tool inject-rpu]
F -->|Non| H
G --> H
H{HDR10+ présent ?}
H -->|Oui| I[hdr10plus_tool inject]
H -->|Non| J
I --> J
J{DoVi présent ?}
J -->|Oui| K[Vérification RPU frames]
J -->|Non| L
K --> L
L[ffmpeg final<br/>vidéo injectée + audio/subs/metadata Film 1<br/>map_metadata/map_chapters] --> M[Nettoyage]
M --> N([Sortie MKV])
flowchart TD
A([Fichier à inspecter]) --> B{Fichier accessible ?}
B -->|Non| X[Arrêt avec erreur]
B -->|Oui| C[Analyse de base avec ffprobe]
C --> D{Analyse exploitable ?}
D -->|Non| Y[Arrêt avec erreur]
D -->|Oui| E[Création de la fiche média<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 détails 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 cohérentes]
K --> L{Vidéo principale présente ?}
L -->|Non| Z[Fiche finale retournée]
L -->|Oui| M[Détection HDR]
M --> N{Métadonnées HDR visibles<br/>directement dans ffprobe ?}
N -->|Oui| Q[Détermination du type HDR]
N -->|Non ou incomplet| O[Essai d'enrichissement HDR<br/>avec mediainfo]
O --> P{Réponse 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 à jour de la vidéo principale]
T --> Z[Fiche finale retournée<br/>prête pour affichage et workflows]
| Fiche media produite par l inspection |
|---|
| Identité générale : chemin du fichier, format du conteneur, durée totale, taille, débit global, titre du conteneur, tags globaux utiles. Pistes vidéo : index, codec, résolution, framerate, profondeur de couleur, infos colorimétriques, type HDR détecté, détails Dolby Vision si disponibles, langue, titre, durée, débit. Pistes audio : index, codec, nombre de canaux, layout stereo/5.1/7.1, fréquence d'échantillonnage, débit, langue, titre, durée, indicateurs utiles comme Atmos ou DTS:X quand ils peuvent être déduits.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 embarquées avec nom, type MIME, taille si disponible, et indication attached_pic pour les images de couverture intégrées comme flux vidéo.Enrichissement MKV/WebM : comptage des tags globaux, récupération prioritaire des langues détaillées language-ietf quand elles existent, avec repli sur language sinon.Normalisation finale : harmonisation des langues vers une forme plus cohérente et exploitable dans l'interface et les workflows suivants. Enrichissement optionnel via mediainfo : frame count si disponible, confirmation ou enrichissement des métadonnées HDR, et détails Dolby Vision supplémentaires quand ffprobe ne les expose pas assez. |
Muxiveo peut être lancé en mode CLI sans initialiser l'interface graphique :
python3 main.py --cli --help
./muxiveo --cli --helpSous-commandes disponibles :
| Commande | Usage |
|---|---|
inspect |
inspecte une ou plusieurs sources et sort du JSON |
inspect --config-template |
génère un template JSON de remux copiant tout |
validate |
valide un job/template JSON sans exécuter ffmpeg |
preview |
affiche la commande ffmpeg prévue |
remux |
exécute un remux headless |
batch |
applique un template JSON à plusieurs entrées |
Exemples :
python3 main.py --cli remux -i source.mkv -o sortie.mkv
python3 main.py --cli preview --config docs/cli/middle.json
python3 main.py --cli remux --config docs/cli/middle.json --dry-run
python3 main.py --cli batch --template docs/cli/complexe-toutes-options-template.json --batch docs/cli/complexe-toutes-options-batch.json --forceLe CLI est non interactif : une sortie existante est refusée sauf --force. Les chemins d'outils sont lus depuis config.ini, avec overrides --ffmpeg, --ffprobe, --mediainfo, --work-dir et --threads.
Les templates JSON peuvent sélectionner les pistes par type, langue et flags d'origine, normaliser les langues BCP-47/RFC5646, renommer les pistes via patterns, ajouter/importer des chapitres, demander TMDB et traiter un batch. Trois configs d'exemple sont fournies dans docs/cli/ : simple, middle et complexe toutes options.
Dans les artefacts packagés, il n'y a pas de binaire CLI séparé : utilisez muxiveo --cli ... sur Linux/AppImage/macOS, ou Muxiveo.exe --cli ... sur Windows. En environnement source, utilisez ./muxiveo --cli ... ou python3 main.py --cli ....
| 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 |
Cette notice ne concerne que les lancement depuis Muxiveo.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, Muxiveo 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
Muxiveo.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, Muxiveo 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
Muxiveo.exe. - Si nécessaire, ajoutez aussi
ffmpeg.exe.
Après ajout à l'allowlist, redémarrez Muxiveo avant de retester un export vers Videos ou Documents.
The packaged AppImage includes FFmpeg as a separate command-line executable.
FFmpeg is licensed under LGPLv2.1+ or GPL depending on the build.
This package includes a GPL-only FFmpeg build compiled without --enable-nonfree.
The corresponding FFmpeg source code and build configuration are available at: FFmpeg/FFmpeg
Muxiveo v3.1.0