El otro día estaba intentando ver una serie en mi servidor Plex y observé que no la detectaba. Esto ocurre a veces en Plex porque la nomenclatura de los ficheros no es la correcta.
Para no ir renombrando uno a uno cada fichero utilicé el siguiente script, que buscará los ficheros con extensiones .mp4, mkv, .avi…y detectará en el nombre el patrón «Cap.Número de episodio».
Cuando detecte dicho patrón se quedará con el número del episodio y lo utilizará para renombrar el archivo.
Para que os funcione correctamente deberéis modificar la ruta donde se encuentran vuestros capítulos y además modificar la línea «new_filename» por el nombre de la serie en cuestión.
IMPORTANTE: El script está desarrollado en python por lo que lógicamente deberéis tener instalado python en vuestro equipo.
import os
import re
def rename_tv_files(directory):
for filename in os.listdir(directory):
if filename.lower().endswith((".mp4", ".mkv", ".avi", ".webm")):
# Busca el número de episodio en el nombre actual
match = re.search(r"Cap\.?(\d+)", filename, re.IGNORECASE)
if match:
episode_number = int(match.group(1))
new_filename = f"Nombre-de-la-serie-s01e{episode_number}{os.path.splitext(filename)[1]}"
old_path = os.path.join(directory, filename)
new_path = os.path.join(directory, new_filename)
os.rename(old_path, new_path)
print(f"Renombrado {filename} a {new_filename}")
else:
print(f"No se encontró un número de episodio en {filename}")
# Ejemplo de uso
tv_directory = "/home/series/nombre-de-la-serie" # Cambia esto a la ubicación real de tus archivos
rename_tv_files(tv_directory)
Este otro código hace exactamente lo mismo a diferencia de cada cada capítulo lo mueve al directorio inmediatamente superior, para cuando tienes los ficheros en diferentes carpetas poder tenerlos una vez ejecutado el script en el mismo directorio:
import os
import re
import shutil
def rename_and_move_tv_files(directory):
for root, _, files in os.walk(directory):
for filename in files:
if filename.lower().endswith((".mp4", ".mkv", ".avi", ".webm")):
# Busca el número de episodio en el nombre actual
match = re.search(r"Cap\.?(\d+)", filename, re.IGNORECASE)
if match:
episode_number = int(match.group(1))
# Encuentra el número de dígitos del episodio
episode_digits = len(match.group(1))
# Formatea el nombre del archivo con ceros a la izquierda según el número de dígitos
new_filename = f"e{episode_number:0{episode_digits}d}{os.path.splitext(filename)[1]}"
old_path = os.path.join(root, filename)
new_path = os.path.join(root, new_filename)
# Renombra el archivo
os.rename(old_path, new_path)
print(f"Renombrado {filename} a {new_filename}")
# Obtiene el directorio padre
parent_directory = os.path.dirname(root)
move_path = os.path.join(parent_directory, new_filename)
# Mueve el archivo al directorio inmediatamente superior
shutil.move(new_path, move_path)
print(f"Movido {new_filename} a {parent_directory}")
else:
print(f"No se encontró un número de episodio en {filename}")
# Ejemplo de uso
tv_directory = "/srv/dev-disk-by-uuid-c01246f9-cb28-463b-b50d-ad04ab909fba/transmission/videos/series/" # Cambia esto a la ubicación real de tus archivos
rename_and_move_tv_files(tv_directory)
Podéis guardar el script con el nombre que queráis y lanzarlo simplemente con el siguiente comando:
python3 nombre-del-script.py