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 Versions
Ordner innerhalb desMy 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 x
Ordner (Saisonnummer ohne führendes0
) 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:
- 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).
- 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. - Wenn keine Übereinstimmung gefunden wird, gehen Sie zurück zu 2 und versuchen Sie es erneut.
- 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). - Holen Sie sich für jede Datei die Staffelnummer und durchsuchen Sie dann den
Season x
Ordner nach demselben Präfix. Wenn es Staffel 0 ist, durchsuchen Sie auch denSpecials
Ordner. - Ersetzen Sie die Erweiterung des übereinstimmenden Namens durch .mp4. Wenn keine Ersetzung erfolgt, ersetzen Sie sie durch .m4v.
- Kopieren Sie die Plex-Datei unter den neuen Pfad und Namen.
- 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:
- Korrupt
- Ausgewaschen
- Ohne Untertitel und/oder Kapitel
- nicht deinterlaced
- 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.