TS Remuxer - Batchverarbeitung mit der Powershell

Begonnen von Mindwarp, Februar 04, 2016, 16:46:23

« vorheriges - nächstes »

Mindwarp

Hallo zusammen,

hier ist ein kleines Powershellskript, mit der sich der TS Remuxer fernsteuern lässt.
Angepasst werden muss:
$Videopfad = 'R:\Video\MKVOut'
   Das ist das Ein/Ausgabeverzeichnis der Videodateien
$TsDoctor = 'C:\Program Files (x86)\Cypheros\TSDoctor2\TSDoctor.exe'
   Pfad zum TS-Doctor

Es werden die TS Dateien aus dem $Videopfad gelesen und in die Maske des TS Remuxer
eingetragen. Unterverzeichnisse werden nicht berücksichtigt.
Wer auch Unterverzeichnisse verarbeiten möchte muss
Get-ChildItem –Path $Videopfad | Sort-Object name | ForEach-Object{
in
Get-ChildItem –Path $Videopfad -recurse | Sort-Object name | ForEach-Object{
ändern.   

Je nach Rechnergeschwindigkeit sollte

   $SleepKurz   = 500
   $SleepMittel = 2000
   $SleepLang   = 4000

angepasst werden (1/2, 2 und 4 Sekunden).
Die Sleepzeiten werden benötigt, da es eine gewisse Zeit braucht, bis ein Fenster
oder die Anwendung zur Verfügung steht.

Da hier Tastatureingaben simuliert werden, ist eine Fehlfunktion beim
verlieren des Fenster-Focus nicht auszuschliessen.
Wird der Focus verloren, kann es passieren, daß es in anderen Fenstern zu ungewollten
Eingaben kommt. Am Besten hat man bei den ersten Versuchen keine anderen Fenster offen.
Auch sollte während der Verarbeitung keine andere Tätigkeiten am Rechner ausgeführt werden.
Bei mir funktioniert das ganze fehlerfrei - es ist aber nicht auszuschliessen,
daß es auf anderen Rechnern nicht wie gewünscht funktioniert.
Bitte ensprechende Vorsicht walten lassen...

Das Programm erhält keine Rückgaben vom Remuxer.
Deshalb muss für das Erkennen des Verarbeitungsende getrickst werden.
Die Größe der neuen Videodatei wird solange eingelesen, bis sie sich nicht mehr ändert.
Die Dateigröße wird im 2 Sekundentakt abgefragt.
Wer eine anderen Rythmus haben möchte kann dies durch anpassen von
$Sleep   = 2
ändern.

Vor dem Start muss vorab der "richtige" Reiter im TS Remuxer gewählt werden.
Also TS, Mkv, Mp4 oder M2TS.
Das Programm funktioniert nur mit einem lizensierten TS-Doctor der Version 2.

Zum Starten der Anwendung muss die Powershell von Microsoft installiert sein.
Es kann dann eine CMD Datei mit diesem Inhalt angelegt werden.

rem @echo off
setlocal enabledelayedexpansion
set "InputFile=C:\Pfad\TsRemuxerBatch.ps1"
@ powershell -ExecutionPolicy Unrestricted -file "%InputFile%"
rem pause


Viel Spaß beim experimentieren.
   

ErichV

1 x Humax ESD-160S, 1x TechniSat TechniBox S4, 2x TechniSat Skystar USB 2 HD CI, Nvidia Shield TV Media Streaming Player, TS Doctor 4.0.37, DVBViewer Pro 7.2.5.0 mit DVBViewer Media Server 3.2.5.0

ErichV

Irgendwie bekomme ich dieses Skript nicht zum Laufen (auch wenn "CurrentUser" und "LocalMachine" auf "Unrestricted" gesetzt werden, bei "Process" wird "Unrestricted" trotz positiver Rückmeldung nicht wirklich übernommen).
"Einmal ausführen" [M] schließt das Fenster.
1 x Humax ESD-160S, 1x TechniSat TechniBox S4, 2x TechniSat Skystar USB 2 HD CI, Nvidia Shield TV Media Streaming Player, TS Doctor 4.0.37, DVBViewer Pro 7.2.5.0 mit DVBViewer Media Server 3.2.5.0

Mindwarp

Bin leider kein Berechtigungsspezialist.
Vielleicht kann Mam was dazu sagen.

Ich habe grade das Zip File rutergeladen und gestartet.
Das Skript funktioniert mit dem CMD File oder aber auch per Rechtsklick "Mit Powershelll ausführen".
Bei mir sieht die Policy so aus.


PS C:\Users\Giant> get-executionpolicy -list

         Scope ExecutionPolicy
         ----- ---------------
MachinePolicy       Undefined
    UserPolicy       Undefined
       Process       Undefined
   CurrentUser       Undefined
  LocalMachine    RemoteSigned


Vielleicht liegt es am Einbinden von
add-type -AssemblyName microsoft.VisualBasic

Mindwarp

Mir ist grade aufgefallen, daß auf dem Screenshot etwas mit
Set-ExecutionPolicy -Scope Process Bypass
zu sehen ist.

Vielleicht liegt es daran.
Sorry. Ich habe keine Ahnung, ob das so funktioniert.

ErichV

Danke für die Rückmeldung.
Wenn ich etwas mehr Zeit habe, werde ich damit näher beschäftigen.  :)
1 x Humax ESD-160S, 1x TechniSat TechniBox S4, 2x TechniSat Skystar USB 2 HD CI, Nvidia Shield TV Media Streaming Player, TS Doctor 4.0.37, DVBViewer Pro 7.2.5.0 mit DVBViewer Media Server 3.2.5.0

Mam

Also Mädels  ;D

Lesen soll ja bilden, sagt man, das funktioniert unbestimmten Gerüchten zufolge selbst bei Ösis (manchmal)  :-* :-* :-*

Was will uns diese böse Fehlermeldung sagen?

Du hast das Skript aus dem Internet runtergeladen, statt es selber einzutippen, Du Schlingel!
Und deshalb ist es (genau wie bei runtergeladenen Programme, wo beim Start auch immer diese doofe Rückfrage kommt, ob Du Dir da gaaanz sicher bist) GESPERRT!

Mach eine Admin-Powershell auf, geh in das Verzeichnis mit dem Skript, tippe "unblock-file <scriptname>" ein und freue Dich an der neuen Ausführungsberechtigung!
8)

ErichV

Zitat von: Mam am Februar 07, 2016, 21:06:28
Mach eine Admin-Powershell auf, geh in das Verzeichnis mit dem Skript, tippe "unblock-file <scriptname>" ein und freue Dich an der neuen Ausführungsberechtigung!
8)

Viel zum Freuen habe ich dann trotzdem nicht, es erscheint kurz eine Fehlermeldung (siehe Anhang) und dann ist das Fenster plötzlich weg.
Mir ist schon bewusst, dass 99 % aller Bugs immer vor dem Bildschirm sitzen bzw. dem Lesen nicht mächtig sind ...  ;D ... aber vielleicht muss Microsoft da unter Win10 noch etwas nachbessern, insbesondere lässt sich bei mir die ExecutionPolicy für "-Scope Process" nicht wirklich festlegen (jedes Mal, wenn ich PowerShell erneut als Admin starte, steht bei "Process" die ExecutionPolicy auf "Undefined").
1 x Humax ESD-160S, 1x TechniSat TechniBox S4, 2x TechniSat Skystar USB 2 HD CI, Nvidia Shield TV Media Streaming Player, TS Doctor 4.0.37, DVBViewer Pro 7.2.5.0 mit DVBViewer Media Server 3.2.5.0

micha

Ich habe mich auch  sehr über dieses Skript gefreut. Nach soetwas hatte ich schon lange gesucht. Mittlerweile hatte ich mich damit abgefunden, die geschnittenen TV Aufnahmen zwecks Zeitmangel nicht mehr nach mkv zu muxen - hat mir bis jetzt auch mit keinem Abspielgerät Probleme bereitet.

Aber hier funktioniert das Skript leider auch nicht. Irgendwann kommt das Skript beim Muxen zum Ergebnis, Dateigröße ändert sich nicht mehr, schließen wir TSD2. Im Resourcen Monitor sieht man auch, dass tatsächlich TSD2 instanzen geschlossen werden, obwohl optisch immer noch geöffnet und weiter gemuxt wird. Die so während des Muxens zweite geöffnete Instanz vom TSD2 bleibt dann an der Stelle hängen, wo der O.K. Klick zum Starten des Remuxen erfolgen sollte.

Mindwarp

Hallo Micha,

hier liegt ein Missverständnis vor.
Der TS-Doctor soll nicht in mehreren Instanzen geöffnet werden.
Ich vermute, daß Du das Skript mehrfach aufrufst. Dafür ist es nicht gedacht.
Man stellt das Ein- und Ausgabeverzeichnis ein. Dann werden alle *.TS Dateien ermittelt und sequentiell abgearbeitet.
Sollte ich mit der Vermutung falsch liegen, kann $Sleep = 2 (Zeile 9) auf einen höheren Wert gesetzt werden.
Dann wird halt länger gewartet, bis auf die Änderung der Videolänge geprüft wird.
Ich arbeite auf einer SSD - vielleicht braucht es auf einer Magnetplatte etwas länger bis die Daten geschrieben sind.

Es kann auch zu Fehlern kommen, wenn schon die Videodateien mit der Endung _remuxed.* vorhanden sind.

Was passiert konkret beim warten auf das Fileende:
1. Es wird aus dem Dateinamen des Eingabevideos der Ausgabename gebastelt.
   Also aus z.B. C:\Remux\Videoname.ts wird C:\Remux\Videoname_Remuxed.mkv
2. Es wird gewartet, bis die Datei vom TS-Doctor angelegt wird.
3. Es wird gewartet, bis sich die Dateilänge nicht mehr ändert.


Mam

#10
Zitat von: ErichV am Februar 08, 2016, 00:10:09
Viel zum Freuen habe ich dann trotzdem nicht, es erscheint kurz eine Fehlermeldung (siehe Anhang) und dann ist das Fenster plötzlich weg.

Auch die kleinen Dinge des Lebens machen den Ösi glücklich (sollten sie zumindest)  ;D

Die "Fehlermeldung" (ist nur eine Warnung, auch hier hilft nachhaltiges Lesen) kommt nicht aus dem Skript heraus, sondern weist auf eine Divergenz der systemweiten Execution-Policy und der lokalen (Da Du sicherlich nicht in einer Domäne bist, sollte es diesen Unterschied gar nicht geben, aber buche es mal unter "Windows-10 Features"  ;D ).
Die Meldung entstammt irgendeinem Bibliotheksscript, genau konnte ich es bis jetzt auch nicht lokalisieren. Aber sie ist zumindest harmlos, alles, läuft trotzdem.

Wenn es bei Dir immer noch nicht geht, liegt es an irgendwas anderem (Exportbeschränkungen? TTIP ?).

Ich hab mir das Teil bislang nicht angeguckt, aber die Meldungen hier mit "Sleep <irgendwas>" stimmen mich irgendwie alert. Da kommen mit so Fragmente wie "mit der heißen Nadel gestrickt" oder "denn sie wissen nicht, wie es richtig geht" in den Kopf. Von solchen Dingen halte ich mich lieber fern.

Mindwarp

Ich mache das hier hauptsächlich um was dazu zu lernen.
Wenn es also eine Möglichkeit gibt, das Besser zu machen, bin ich dazu bereit auch Anderes auszuprobieren.

Ich habe es halt nicht hinbekommen, die Fenster richtig anzusprechen, auszulesen oder einen Return Wert zu erhalten.
Das Ganze passiert quasi im Blindflug.

Konstruktive Vorschläge sind also willkommen.

ErichV

Zitat von: Mam am Februar 08, 2016, 09:45:05
Auch die kleinen Dinge des Lebens machen den Ösi glücklich (sollten sie zumindest)  ;D

Die "Fehlermeldung" (ist nur eine Warnung, auch hier hilft nachhaltiges Lesen) kommt nicht aus dem Skript heraus, sondern weist auf eine Divergenz der systemweiten Execution-Policy und der lokalen (Da Du sicherlich nicht in einer Domäne bist, sollte es diesen Unterschied gar nicht geben, aber buche es mal unter "Windows-10 Features"  ;D ).
Die Meldung entstammt irgendeinem Bibliotheksscript, genau konnte ich es bis jetzt auch nicht lokalisieren. Aber sie ist zumindest harmlos, alles, läuft trotzdem.

Dass es sich um eine Warnung handelt, habe ich wahrgenommen, nur mit dem Text kann ich leider nicht viel anfangen.  ;D
Ja, du hast Recht, ich habe systemweit alles auf "Unrestricted" gesetzt, weil es vorher auch schon nicht ging. In den Gruppenrichtlinien (Computerkonfiguration, später dann auch testweise unter Benutzerkonfiguration) unter "Administrative Vorlagen" --> "Windows-Komponenten" --> "Windows PowerShell" --> "Skriptausführung aktivieren" habe ich jeweils die Skriptausführung aktiviert und die Ausführungsrichtlinie auf "Alle Skripte zulassen" eingestellt.

Zitat von: Mam am Februar 08, 2016, 09:45:05
Wenn es bei Dir immer noch nicht geht, liegt es an irgendwas anderem (Exportbeschränkungen? TTIP ?).

Nicht, dass ich wüsste. TTIP kam mir bisher nur in einem anderen Kontext zum Vorschein.  ;D
... und dort, wo ich testweise etwas umgestellt habe, merke ich mir ganz genau.  ;)
1 x Humax ESD-160S, 1x TechniSat TechniBox S4, 2x TechniSat Skystar USB 2 HD CI, Nvidia Shield TV Media Streaming Player, TS Doctor 4.0.37, DVBViewer Pro 7.2.5.0 mit DVBViewer Media Server 3.2.5.0

Mam

Zitat von: ErichV am Februar 08, 2016, 12:44:02
... und dort, wo ich testweise etwas umgestellt habe, merke ich mir ganz genau.  ;)
Tscha, wenn alle das doch auch machen würden  ;D

Z.B. Microsoft, denn die Meldung tritt erst seit Windows 10 auf und das eigentlich bei allen unsignierten Skripten. Es ist also (ausnahmsweise   :P) nicht ein lokales Ösi Problem, sondern betrifft alle.

Und mit irgendeinem Update wird sie wahrscheinlich genauso still und heimlich verduften, wie sie vor ein paar Monaten aufgetaucht ist.

Mindwarp

Ich habe das Skript etwas überarbeitet.
Es wird jetzt geprüft, ob schon ein _Remuxed.* File schon vorhanden ist, damit keine bestehende Datei überschrieben wird.
Auch werden Dateien mit der Endung _Remuxed.* von der Bearbeitung ausgeschlossen.

Die Verwendung von Sleep wurde minimiert.
Stattdessen wird geprüft, ob ein Fenster offen oder geschlossen ist.
Beim Fenster "Öffnen" kann das schiefgehen,  wenn ein anderer Dialog mit dem Fenster "Öffnen" offen ist.
Es wird zusätzlich geprüft, ob der TS-Doctor Prozess gestartet oder geschloßen ist.

Einen Ersatz für das Prüfen auf die Dateigröße habe ich nicht gefunden.
Man kann aber die Prüfung deaktivieren (Zeile 227). Dann wird aber kein Log-File erstellt.

@Erich
Schon mal probiert ein Leeres *.ps1 File zu erstellen und den Sourcecode umzukopieren?

Ich hoffe, daß das Skript jetzt besser funktioniert.


www.cypheros.de