Administration native sur le Mac, réencodage sélectif et aide intégrée

- admin.sh : RTG lancé directement sur le Mac (plus de conteneur), nginx
  joint l'interface par host.docker.internal:8765 ; variante conteneur
  conservée (admin-docker.sh, docker-compose-conteneur.yml)
- Compression : réglages lus dans les fichiers (CRF, codec), refaire
  seulement le 1080p ou le 720p, seulement si les réglages ont changé ;
  réglages vidéo propres à chaque voyage ; « Compression actuelle » affichée
- Plus d'arrêt automatique après 2 h d'inactivité (--arret-inactif, 0 par défaut) ;
  arrêt propre qui attend la fin des encodages en cours
- Aide contextuelle dans l'interface (rtg/interface/aide) ; README centré
  sur l'installation et la mise en place
- Cœurs attribués au conteneur détectés (cgroup) et signalés

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Mf2kATMtqVABHSYdxJMnim
This commit is contained in:
FabriceandClaude Opus 5.5 committed 2026-10-19 05:32:05 +00:00
1 parent b54ae69b19
commit ada3d76f50
38 files changed
+1067 -264

No files matched your search

+55
View File
@@ -0,0 +1,55 @@
<div id="compression" class="encart compression" hx-get="{{ base }}/voyage/compression?v={{ v.chemin|url }}"
hx-trigger="tache-finie from:body" hx-swap="outerHTML">
<h3>Compression des vidéos</h3>
<table>
<thead><tr><th></th><th>Vidéos actuelles</th><th>Prochains encodages</th></tr></thead>
<tbody>
{% for version in ("1080p", "720p") %}
{% set b = bilan[version] %}{% set c = cibles[version] %}
<tr>
<td><strong>{{ version }}</strong></td>
<td>
{% if not b.total %}<span class="discret">aucune</span>
{% else %}
{% for reg, n in b.reglages.most_common() %}
<div>{{ reg[0] }}{% if reg[1] is not none %} CRF {{ reg[1]|crf }}{% else %} <span class="discret">(réglages non inscrits : encodeur matériel ?)</span>{% endif %}
<span class="discret">× {{ n }}</span>
{% if reg == c %}<span class="pastille ok">conforme</span>{% else %}<span class="pastille attention">différent</span>{% endif %}
</div>
{% endfor %}
<div class="discret">{{ b.total }} vidéo{{ 's' if b.total > 1 }}{% if b.lues < b.total %} · échantillon de {{ b.lues }}{% endif %}</div>
{% endif %}
</td>
<td>{{ c[0] }}{% if c[1] is not none %} CRF {{ c[1]|crf }}{% else %} (encodeur matériel){% endif %}</td>
</tr>
{% endfor %}
</tbody>
</table>
<p class="aide">Qualité {{ noms_qualites.get(cfg.video.qualite, cfg.video.qualite) }}, vitesse {{ cfg.video.preset }},
encodeur {{ "matériel" if p.encodeur == "vt" else "processeur" }} :
{{ "réglages propres à ce voyage" if propre else "réglages du site" }}.
Plus le CRF est élevé, plus les fichiers sont légers, et moins la qualité est bonne.</p>
<details {{ 'open' if propre }}>
<summary>Réglages vidéo propres à ce voyage</summary>
<form class="formulaire" hx-post="{{ base }}/voyage/video" hx-target="#compression" hx-swap="outerHTML">
<input type="hidden" name="v" value="{{ v.chemin }}">
<label>Qualité
<select name="qualite">
<option value="">Comme le site ({{ noms_qualites.get(site.video.qualite, site.video.qualite) }})</option>
{% for q in qualites %}<option value="{{ q }}" {{ 'selected' if propre.qualite == q }}>{{ noms_qualites[q]|capitalize }} (CRF {{ qualites[q].crf_hevc }} / {{ qualites[q].crf_h264 }})</option>{% endfor %}
</select></label>
<label>Vitesse de l'encodeur
<select name="preset">
<option value="">Comme le site ({{ site.video.preset }})</option>
{% for pr in presets %}<option {{ 'selected' if propre.preset == pr }}>{{ pr }}</option>{% endfor %}
</select>
<span class="aide">Plus lent = un peu plus léger à qualité égale.</span></label>
<label>CRF 1080p (HEVC), pour un essai
<input type="number" name="crf_hevc" min="0" max="51" value="{{ propre.crf_hevc if propre.crf_hevc is defined }}" placeholder="selon la qualité ({{ qualites.get(cfg.video.qualite, qualites.equilibree).crf_hevc }})"></label>
<label>CRF 720p (H.264), pour un essai
<input type="number" name="crf_h264" min="0" max="51" value="{{ propre.crf_h264 if propre.crf_h264 is defined }}" placeholder="selon la qualité ({{ qualites.get(cfg.video.qualite, qualites.equilibree).crf_h264 }})"></label>
<p><button class="principal">Enregistrer</button> <span class="ok">{{ message }}</span></p>
</form>
</details>
</div>