Teilweise übereinstimmende Dateien verschieben, die bereits vorhanden sind (Plex-Transcoder)

Teilweise übereinstimmende Dateien verschieben, die bereits vorhanden sind (Plex-Transcoder)

Ich versuche herauszufinden, wie ich dies als „Standard“-Bash-Skript (das auf einem QNAP läuft) schreiben kann, bin mir aber nicht sicher, wo ich anfangen soll – ich kann es in NodeJS machen (da ich es für meine Arbeit ständig verwende), hätte aber wirklich lieber etwas.

Ich bin eher auf der Suche nach Hinweisen, wie das geht, und nicht nach einem tatsächlichen Skript (aber lassen Sie sich davon nicht abhalten) ;-)

Mithilfe der integrierten konvertierten Dateien von Plex (aus Kompatibilitätsgründen usw.) – als Eingabe dient ein Ordnerbaum mit verschiedenen Filmdateien (die häufigsten Erweiterungen sind .avi, .mp4 oder .mkv), aus denen dann eine .mp4-Datei in einem leicht anderen Pfad erstellt wird.

Ich möchte die Plex-Ausgabedateien wieder über die Eingabedateien kopieren (nicht verschieben – ich überlasse es Plex, sein eigenes Chaos zu beseitigen).

Beispielstruktur - aus...

Plex-Versionen/Für Mobilgeräte optimiert/Meine TV-Show/S01E01.mp4

...Zu...

Meine TV-Show (1990-1995)/Staffel 1/s01e01 Mein Episodenname.mkv

Anmerkungen:

  • Der Stammpfad ist für beide derselbe (für mein Setup, andere haben möglicherweise den Plex VersionsOrdner innerhalb des My TV Show (1990-1995)Ordners – dieses Skript wird nach Fertigstellung usw. auf GitHub hochgeladen).

  • Der Name der TV-Sendung kann sich ändern. Ich habe das Start- und Enddatum (oder ein nachfolgendes Datum, -wenn es noch läuft) in Klammern gesetzt. Plex verwendet den „offiziellen“ Namen, der ein Startjahr haben kann, wenn es mehr als eine Sendung mit demselben Namen gibt.

  • Unter Berücksichtigung des oben Gesagten kann es sein, dass ich mehrere Shows mit demselben Basisnamen, aber aus unterschiedlichen Jahren habe.

  • Der Zielbasisname befindet sich im Season xOrdner (Saisonnummer ohne führendes 0) und hat dasselbe Präfix.

  • Wenn es Staffel 0 ist, befindet es sich möglicherweise stattdessen im Specials/Ordner (irgendwann werde ich für Konsistenz sorgen).

  • Wenn der ursprüngliche Dateiname die Endung .mp4 hatte, muss die kopierte Zieldatei den Dateinamen .m4v haben.

  • Nach dem Kopieren der neuen Datei kann die Originaldatei entfernt werden (wobei die Quell- und Zieldateien der Kopie verbleiben).

Wenn ich dies in NodeJS machen würde, würde ich ungefähr Folgendes tun:

  1. Erhalten Sie eine sortierte Liste mit Ordnern mit Fernsehsendungen (bei früheren Sendungen ist die Jahreszahl im Allgemeinen nicht angegeben, bei späteren Sendungen schon).
  2. Ersetzen Sie für jeden Ordner die Endjahre durch reguläre Ausdrücke (, /-\d*\)/um ""nur das Startjahr einzuschließen) und führen Sie einen Abgleich mit den Plex-Ordnern ohne Berücksichtigung der Groß-/Kleinschreibung durch. Wenn keine Übereinstimmung vorliegt, versuchen Sie es ohne Jahr.
  3. Wenn keine Übereinstimmung gefunden wird, gehen Sie zurück zu 2 und versuchen Sie es erneut.
  4. Holen Sie sich eine Liste der Plex-Versionsdateien, die dem Muster entsprechen /S\d+E\d+\.mp4/(es können Untertitel enthalten sein, die entstanden sind, als ich einfach alles gerippt und die Streams nicht gefiltert habe).
  5. Holen Sie sich für jede Datei die Staffelnummer und durchsuchen Sie dann den Season xOrdner nach demselben Präfix. Wenn es Staffel 0 ist, durchsuchen Sie auch den SpecialsOrdner.
  6. Ersetzen Sie die Erweiterung des übereinstimmenden Namens durch .mp4. Wenn keine Ersetzung erfolgt, ersetzen Sie sie durch .m4v.
  7. Kopieren Sie die Plex-Datei unter den neuen Pfad und Namen.
  8. Entfernen Sie die übereinstimmende Datei und gehen Sie dann zurück zu 5.

Jetzt kann ich Variablen für Namen verwenden, dasselbe gilt für die offensichtliche Aufhebung der Verknüpfung. Ich hätte gerne Hilfe bei Folgendem:

Beste Möglichkeit, den ursprünglichen Ordner abzugleichen (ist 1-3 die beste Möglichkeit oder gibt es eine bessere Abkürzung? Sehen wir uns diese hier an:Kopieren Sie Dateien nur dann in einen Zielordner, wenn die Dateien bereits vorhanden sind, die Quelldateien jedoch eine andere Dateierweiterung haben)

Überprüfen Sie, ob eine Datei vorhanden ist, und probieren Sie andernfalls verschiedene Erweiterungskombinationen aus.

edit: Es gibt über 30 TB an Dateien und PlexnichtOriginaldateien ersetzen (seit 2015 gibt es hierfür eine offene Anfrage).

Antwort1

Ich persönlich würde vorschlagen, FFmpeg zu verwenden, um die Dateien in Ihrem primären Plex-Bibliotheksordner zu konvertieren. Etwas in der Art:

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

Sie können Plex auch einfach so einstellen, dass Ihre optimierte Version im Verzeichnis der Originaldateien gespeichert wird.

Allerdings ist dieser Codekönntetun, was Sie suchen, aber es ist völlig ungetestet:

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

Antwort2

Sie sollten nicht automatisch die für Plex optimierten Versionen verwenden, da diese möglicherweise:

  1. Korrupt
    Bildbeschreibung hier eingeben
  2. Ausgewaschen
    Bildbeschreibung hier eingeben
  3. Ohne Untertitel und/oder Kapitel
    Bildbeschreibung hier eingeben
  4. nicht deinterlaced
    Bildbeschreibung hier eingeben
  5. mit eingebrannten Untertiteln in einer Sprache, die Sie oder ein anderer Zuschauer nicht (mehr) möchten

Dies hängt von bekannten Fehlern ab oder möglicherweise passt die Eingabe nicht zu 100 % zum erforderlichen Kodierungsprofil der Transkodierungssoftware oder iGPU. Die bessere Methode wäre also, die optimierten Versionen anzuzeigen und sie einzeln zu ersetzen. Der Verlust der Originaldatei könnte ein größeres Problem darstellen als die Einsparung von Speicherplatz. Wenn Ihr Ziel darin besteht, aus Kostengründen Speicherplatz zu sparen, vergessen Sie nicht, dass die erneute Transkodierung so vieler Videos die Stromrechnung in die Höhe treibt und der Speicherplatz mit der Zeit immer billiger wird.

Und schlussendlichDie meisten Neutranskodierungen führen zu Qualitätsverlustenund seinkeine leichte Aufgabe, die richtigen Transkodierungsoptionen zu findenpassend zu Ihren Anforderungen an Qualität und Dateigröße.

verwandte Informationen