[multiplex] Change la gestion des chapitres
All checks were successful
/ 🐍 Build & Publish Python Packages (push) Successful in 10s

This commit is contained in:
lionel
2025-07-24 01:07:42 +02:00
parent 4766e87e8a
commit 4d7170f570

View File

@ -73,15 +73,7 @@ def find_first_video_track_index(mkv_file):
return idx
return None
def has_named_chapters(chapters):
"""
Détermine si une liste de chapitres contient des noms réels (autres que des génériques).
"""
import re
pattern = re.compile(r'(?i)^\s*(chapter|chapitre)\s*\d+\s*$')
return any(not pattern.match(c.name or '') for c in chapters)
def process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, dest_dir):
def process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, dest_dir, chapitre):
"""
Traite un épisode en combinant les pistes vidéo et audio/sous-titres de deux sources.
@ -91,6 +83,7 @@ def process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, des
:param saison: Numéro de saison
:param serie_name: Nom de la série
:param dest_dir: Répertoire de sortie
:param chapitre: Indique quels chapitres inclure dans le fichier final
:return: None
"""
# Affiche une ligne bleue pour la lisibilité dans le terminal
@ -168,27 +161,14 @@ def process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, des
final_mkv.add_track(track)
# Traitement des chapitres
try:
chapters_1 = (source_1_mkv._info_json.get('chapters'))[0].get('num_entries')
except (AttributeError, IndexError):
chapters_1 = 0
try:
chapters_2 = (source_2_mkv._info_json.get('chapters'))[0].get('num_entries')
except (AttributeError, IndexError):
chapters_2 = 0
valid_1 = chapters_1 >= 4
valid_2 = chapters_2 >= 4
if valid_1 and len(chapters_1) >= len(chapters_2):
if chapitre in ('v', 'video'):
source_2_mkv.no_chapters()
elif valid_2:
elif chapitre in ('a', 'audio'):
source_1_mkv.no_chapters()
else:
source_1_mkv.no_chapters()
source_2_mkv.no_chapters()
# Éffacer tous les tags
source_1_mkv.no_global_tags()
source_2_mkv.no_global_tags()
@ -227,6 +207,7 @@ def main():
parser.add_argument("-n", "--nom", required=True, help="Nom de la série")
parser.add_argument("-s", "--saison", required=True, help="Numéro de la saison")
parser.add_argument("-d", "--dest", required=True, help="Répertoire de sortie")
parser.add_argument("-c", "--chapitre", choices=['n', 'non', 'v', 'video', 'a', 'audio'], default='a', help="Gestion des chapitres : 'n'/'non' pour aucun, 'v'/'video' pour source vidéo, 'a'/'audio' pour source audio (par défaut 'a')")
args = parser.parse_args()
@ -243,6 +224,7 @@ def main():
serie_name = args.nom
saison = args.saison
chapitre = args.chapitre
# Chemin de sortie
dest_dir = f"{args.dest}/{serie_name}/Saison {saison}"
@ -254,7 +236,7 @@ def main():
for i in range(1, max(count1, count2) + 1):
episode = f"{i:02}"
process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, dest_dir)
process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, dest_dir, chapitre)
if __name__ == '__main__':
main()