[multiplex] Change la gestion des chapitres
All checks were successful
/ 🐍 Build & Publish Python Packages (push) Successful in 10s
All checks were successful
/ 🐍 Build & Publish Python Packages (push) Successful in 10s
This commit is contained in:
@ -73,15 +73,7 @@ def find_first_video_track_index(mkv_file):
|
|||||||
return idx
|
return idx
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def has_named_chapters(chapters):
|
def process_episode(episode, source_dir_1, source_dir_2, saison, serie_name, dest_dir, chapitre):
|
||||||
"""
|
|
||||||
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):
|
|
||||||
"""
|
"""
|
||||||
Traite un épisode en combinant les pistes vidéo et audio/sous-titres de deux sources.
|
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 saison: Numéro de saison
|
||||||
:param serie_name: Nom de la série
|
:param serie_name: Nom de la série
|
||||||
:param dest_dir: Répertoire de sortie
|
:param dest_dir: Répertoire de sortie
|
||||||
|
:param chapitre: Indique quels chapitres inclure dans le fichier final
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
# Affiche une ligne bleue pour la lisibilité dans le terminal
|
# 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)
|
final_mkv.add_track(track)
|
||||||
|
|
||||||
# Traitement des chapitres
|
# Traitement des chapitres
|
||||||
try:
|
if chapitre in ('v', 'video'):
|
||||||
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):
|
|
||||||
source_2_mkv.no_chapters()
|
source_2_mkv.no_chapters()
|
||||||
elif valid_2:
|
elif chapitre in ('a', 'audio'):
|
||||||
source_1_mkv.no_chapters()
|
source_1_mkv.no_chapters()
|
||||||
else:
|
else:
|
||||||
source_1_mkv.no_chapters()
|
source_1_mkv.no_chapters()
|
||||||
source_2_mkv.no_chapters()
|
source_2_mkv.no_chapters()
|
||||||
|
|
||||||
|
|
||||||
# Éffacer tous les tags
|
# Éffacer tous les tags
|
||||||
source_1_mkv.no_global_tags()
|
source_1_mkv.no_global_tags()
|
||||||
source_2_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("-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("-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("-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()
|
args = parser.parse_args()
|
||||||
|
|
||||||
@ -243,6 +224,7 @@ def main():
|
|||||||
|
|
||||||
serie_name = args.nom
|
serie_name = args.nom
|
||||||
saison = args.saison
|
saison = args.saison
|
||||||
|
chapitre = args.chapitre
|
||||||
|
|
||||||
# Chemin de sortie
|
# Chemin de sortie
|
||||||
dest_dir = f"{args.dest}/{serie_name}/Saison {saison}"
|
dest_dir = f"{args.dest}/{serie_name}/Saison {saison}"
|
||||||
@ -254,7 +236,7 @@ def main():
|
|||||||
|
|
||||||
for i in range(1, max(count1, count2) + 1):
|
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, chapitre)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
Reference in New Issue
Block a user