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 glob
import re
import argparse
from pathlib import Path
from pymkv import MKVFile, MKVTrack
@ -50,9 +51,13 @@ def find_episode_file(source_dir, saison, episode):
:param episode: Numéro de l'épisode
:return: Chemin du fichier trouvé ou None
"""
target = f"s0{saison}e{episode}".lower()
for file in glob.glob(os.path.join(source_dir, "*.mkv")):
if target in os.path.basename(file).lower():
pattern = re.compile(rf"s{int(saison):02d}[ex]{int(episode):02d}", re.IGNORECASE)
p = Path(source_dir)
# 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 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']
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:
codec = track._track_codec
if track.forced_track:
@ -201,24 +206,53 @@ def process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, des
def main():
"""
Point d'entrée principal du script.
Lit les arguments de ligne de commande, prépare les répertoires,
et lance le traitement de chaque épisode (de 01 à 30).
@brief Point d'entrée du script.
@details Parse les arguments en ligne de commande et lance le traitement
des épisodes de la série.
@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:
print(f'Usage: {sys.argv[0]} <SOURCE_DIR_1> <SOURCE_DIR_2> <SERIE_NAME> <SAISON>')
sys.exit(1)
parser = argparse.ArgumentParser(
description="Combine des épisodes MKV depuis deux sources (vidéo + audio/sous-titres)."
)
source_dir_1 = sys.argv[1]
source_dir_2 = sys.argv[2]
serie_name = sys.argv[3]
saison = sys.argv[4]
dest_dir = f"/media/data/reencoded/{serie_name}/Saison {saison}"
parser.add_argument("-v", "--video", help="Répertoire source vidéo" )
parser.add_argument("-a", "--audio", help="Répertoire source audio/sous-titres" )
parser.add_argument("-va", help="Répertoire source commun pour vidéo et audio" )
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")
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)
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}"
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(
name='multiplex',
version='0.1.0',
version='0.1.1',
description='Un script pour multiplexer les fichiers vidéo avec mkvmerge.',
py_modules=['multiplex'],
install_requires=[