Compare commits

..

2 Commits

Author SHA1 Message Date
a767c8c35a [multiplex] Fix regex nom de fichiers + Compte nb fichiers + 0.1.1
All checks were successful
/ 🐍 Build & Publish Python Packages (push) Successful in 59s
2025-07-24 00:01:39 +02:00
7fd2a00938 [multiplex] Fix sous-titres par défaut + argparse 2025-07-23 23:44:22 +02:00
2 changed files with 52 additions and 18 deletions

View File

@ -2,6 +2,7 @@ import os
import sys import sys
import glob import glob
import re import re
import argparse
from pathlib import Path from pathlib import Path
from pymkv import MKVFile, MKVTrack from pymkv import MKVFile, MKVTrack
@ -50,9 +51,13 @@ def find_episode_file(source_dir, saison, episode):
:param episode: Numéro de l'épisode :param episode: Numéro de l'épisode
:return: Chemin du fichier trouvé ou None :return: Chemin du fichier trouvé ou None
""" """
target = f"s0{saison}e{episode}".lower() pattern = re.compile(rf"s{int(saison):02d}[ex]{int(episode):02d}", re.IGNORECASE)
for file in glob.glob(os.path.join(source_dir, "*.mkv")): p = Path(source_dir)
if target in os.path.basename(file).lower(): # On récupère tous les fichiers mkv ou mp4 en une seule liste
files = list(p.glob("*.mkv")) + list(p.glob("*.mp4"))
for file in files:
if pattern.search(os.path.basename(file)):
return file return file
return None return None
@ -145,7 +150,7 @@ def process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, des
subtitle_tracks_other = [t for t in source_2_mkv.tracks if t.track_type == 'subtitles' and t.language != 'fre'] subtitle_tracks_other = [t for t in source_2_mkv.tracks if t.track_type == 'subtitles' and t.language != 'fre']
for idx, track in enumerate(subtitle_tracks_fr): for idx, track in enumerate(subtitle_tracks_fr):
track.default_track = (idx == 0) track.default_track = (idx == 0) and track.default_track
if not track.track_name: if not track.track_name:
codec = track._track_codec codec = track._track_codec
if track.forced_track: if track.forced_track:
@ -201,24 +206,53 @@ def process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, des
def main(): def main():
""" """
Point d'entrée principal du script. @brief Point d'entrée du script.
@details Parse les arguments en ligne de commande et lance le traitement
Lit les arguments de ligne de commande, prépare les répertoires, des épisodes de la série.
et lance le traitement de chaque épisode (de 01 à 30). @arg -v, --video Répertoire source vidéo
@arg -a, --audio Répertoire source audio/sous-titres
@arg -va Répertoire source commun pour vidéo et audio
@arg -n, --nom Nom de la série
@arg -s, --saison Numéro de la saison
@arg -d, --dest Répertoire de sortie
@return None
""" """
if len(sys.argv) != 5: parser = argparse.ArgumentParser(
print(f'Usage: {sys.argv[0]} <SOURCE_DIR_1> <SOURCE_DIR_2> <SERIE_NAME> <SAISON>') description="Combine des épisodes MKV depuis deux sources (vidéo + audio/sous-titres)."
sys.exit(1) )
source_dir_1 = sys.argv[1] parser.add_argument("-v", "--video", help="Répertoire source vidéo" )
source_dir_2 = sys.argv[2] parser.add_argument("-a", "--audio", help="Répertoire source audio/sous-titres" )
serie_name = sys.argv[3] parser.add_argument("-va", help="Répertoire source commun pour vidéo et audio" )
saison = sys.argv[4] parser.add_argument("-n", "--nom", required=True, help="Nom de la série")
dest_dir = f"/media/data/reencoded/{serie_name}/Saison {saison}" 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")
args = parser.parse_args()
# Gestion de l'option commune -va
if args.va:
source_dir_1 = source_dir_2 = args.va
else:
source_dir_1 = args.video
source_dir_2 = args.audio
# Vérification que les deux dossiers sont renseignés
if not source_dir_1 or not source_dir_2:
parser.error("Vous devez fournir soit -va, soit à la fois -v et -a.")
serie_name = args.nom
saison = args.saison
# Chemin de sortie
dest_dir = args.dest
Path(dest_dir).mkdir(parents=True, exist_ok=True) Path(dest_dir).mkdir(parents=True, exist_ok=True)
for i in range(1, 31): # Compte le nombre de fichiers dans chaque répertoire source
count1 = sum(1 for _ in Path(source_dir_1).iterdir() if _.is_file())
count2 = sum(1 for _ in Path(source_dir_2).iterdir() if _.is_file())
for i in range(1, max(count1, count2) + 1):
episode = f"{i:02}" 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)

View File

@ -2,7 +2,7 @@ from setuptools import setup
setup( setup(
name='multiplex', name='multiplex',
version='0.1.0', version='0.1.1',
description='Un script pour multiplexer les fichiers vidéo avec mkvmerge.', description='Un script pour multiplexer les fichiers vidéo avec mkvmerge.',
py_modules=['multiplex'], py_modules=['multiplex'],
install_requires=[ install_requires=[