Mover archivos parcialmente coincidentes que ya existen (transcodificador Plex)

Mover archivos parcialmente coincidentes que ya existen (transcodificador Plex)

Estoy tratando de descubrir cómo escribir esto como un script bash "estándar" (que se ejecuta en QNAP), pero no estoy seguro de por dónde empezar. Puedo hacerlo en NodeJS (ya que lo uso todo el tiempo para mi trabajo). , pero realmente preferiría tener algo.

Estoy buscando sugerencias sobre cómo hacer esto en lugar de un script real (aunque no dejes que eso te detenga) ;-)

Usando los archivos convertidos integrados de Plex (para compatibilidad, etc.): la entrada es un árbol de carpetas con varios archivos de películas (las extensiones suelen ser .avi, .mp4 o .mkv), que luego se convierte en un archivo .mp4 en un camino ligeramente diferente.

Quiero copiar (no mover; dejaré que Plex limpie su propio desorden) los archivos de salida de Plex sobre los archivos de entrada.

Estructura de ejemplo: de...

Versiones de Plex/Optimizado para dispositivos móviles/My Tv Show/S01E01.mp4

...a...

Mi programa de televisión (1990-1995)/Temporada 1/s01e01 Nombre de mi episodio.mkv

Notas:

  • La ruta raíz para ambos es la misma (para mi configuración, otros pueden tener la Plex Versionscarpeta dentro de la My TV Show (1990-1995)carpeta; este script irá a GitHub cuando termine, etc.).

  • El nombre del programa de televisión puede cambiar. Puse la fecha de inicio y finalización (o la fecha final -si está en curso) entre paréntesis. Plex utilizará el nombre "oficial", que podría tener un año de inicio si hay más de un programa con el mismo nombre.

  • Teniendo en cuenta lo anterior, es posible que tenga varios programas con el mismo nombre base, pero de diferentes años.

  • El nombre base de destino estará en la Season xcarpeta (número de temporada sin inicio 0) y tendrá el mismo prefijo.

  • Si es la temporada 0, entonces podría estar en la Specials/carpeta (en algún momento conseguiré que las cosas sean consistentes).

  • Si el nombre del archivo original tenía un nombre de archivo .mp4, entonces el archivo de destino copiado debe tener un nombre de archivo .m4v.

  • Después de copiar el nuevo archivo, se puede eliminar el archivo original (dejando los archivos de origen y de destino de la copia).

Si estuviera haciendo esto en NodeJS, haría algo como lo siguiente:

  1. Obtenga una lista ordenada de carpetas de programas de televisión (los programas anteriores generalmente no tienen años, mientras que los posteriores sí).
  2. Para cada carpeta, la expresión regular reemplace los años finales ( /-\d*\)/para ""incluir solo el año de inicio y no distinga entre mayúsculas y minúsculas con las carpetas Plex. Si no hay coincidencia, intente sin año.
  3. Si no se encuentra ninguna coincidencia, vuelva a 2 e inténtelo de nuevo.
  4. Obtenga una lista de archivos de versión de Plex que coincidan con el patrón /S\d+E\d+\.mp4/(pueden incluirse subtítulos desde que extraje todo y no filtré las transmisiones).
  5. Para cada archivo, obtenga el número de temporada y luego busque en la Season xcarpeta el mismo prefijo. Si es la temporada 0, busque también en la Specialscarpeta.
  6. Reemplace la extensión del nombre coincidente con .mp4; si no se realiza ningún reemplazo, reemplácela con .m4v.
  7. Copie el archivo Plex a la nueva ruta+nombre.
  8. Elimine el archivo coincidente y luego regrese a 5.

Ahora puedo hacer variables para los nombres, lo mismo para la desvinculación obvia; con lo que me gustaría recibir ayuda es...

La mejor manera de hacer que la carpeta inicial coincida (¿es 1-3 la mejor manera o hay un atajo mejor? Mire este:Copie archivos a una carpeta de destino solo si los archivos ya existen. pero los archivos fuente tienen una extensión de archivo diferente)

Comprobar si existe un archivo y probar diferentes combinaciones de extensiones si no es así.

editar: hay más de 30 TB de archivos, y Plex sínoreemplazar archivos originales (ha habido una solicitud abierta desde 2015).

Respuesta1

Personalmente, sugeriría usar FFmpeg para convertir los archivos dentro de su carpeta principal de la Biblioteca Plex. Algo parecido a:

set -s globstar;

for f in ./**/*.{avi,mp4,mkv}; do
    ffmpeg -i "$f" -c:a aac -c:v libx264 -preset slow "${f%.*}_b.mp4"
    rm "$f"
    mv "${f%.*}_b.mp4" "${f%.*}.mp4"
done

También puede configurar Plex para que almacene su versión optimizada dentro del directorio de los archivos originales.

Dicho esto, este códigopodríahaz lo que estás buscando, pero no está completamente probado:

Plex_Main="/Main/Plex/Dir/"
Optimized="/Optimized/Versions/Dir/"

for DIR in "$Optimized"/*; do
    if [[ -d "$DIR" ]]; then
        SHOW_MATCHES=("$Plex_Main"/*"$(basename "$DIR")"*/)

        # If there is one, and only one, match
        if [[ ${#SHOW_MATCHES[@]} -eq 1 ]]; then
            # The non-optimized show path
            SHOW_PATH="$Plex_Main"/*"$(basename "${DIR[0]}")"*

            for f in "$DIR"/*.mp4; do
                # Remove file extension
                EP_ID="${f%.*}"

                EP_MATCHES=("$SHOW_PATH"/*"${EP_ID[0]}"*)

                if [[ ${#EP_MATCHES[@]} -eq 1 ]]; then
                    ORIG_FILE="${EP_MATCHES[0]}"
                    cp "$f" "$SHOW_PATH/${ORIG_FILE%.*}.mp4"
                fi
            done
        fi
    fi
done

Respuesta2

No debes usar automáticamente las versiones optimizadas de Plex ya que podrían ser:

  1. Corrupto
    ingrese la descripción de la imagen aquí
  2. Lavado
    ingrese la descripción de la imagen aquí
  3. Sin subtítulos y/o capítulos
    ingrese la descripción de la imagen aquí
  4. no desentrelazado
    ingrese la descripción de la imagen aquí
  5. con subtítulos grabados en un idioma que usted u otro espectador ya no quiere (ya)

Esto depende de errores conocidos o tal vez la entrada no se ajuste al 100% al perfil de codificación necesario del software de transcodificación o iGPU. Entonces, el mejor método sería ver las versiones optimizadas y reemplazarlas individualmente. Perder el archivo original podría ser un problema mayor que ahorrar espacio de almacenamiento. Si tu objetivo es ahorrar espacio por motivos de costes, no olvides que volver a transcodificar tantos vídeos aumenta la factura de la luz y el almacenamiento es cada vez más barato con el tiempo.

Y finalmentela mayoría de las retranscodificaciones significan perder calidady esNo es una tarea fácil encontrar las opciones de transcodificación correctas.adaptándose a sus necesidades de calidad y tamaño de archivo.

información relacionada