Cypheros Transportstream Forum

Deutschsprachiger Support => TS-Doctor 2.x => Thema gestartet von: Mindwarp am Februar 04, 2016, 16:46:23

Titel: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 04, 2016, 16:46:23
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.
   
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: ErichV am Februar 07, 2016, 16:50:47
Danke.  :)
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: ErichV am Februar 07, 2016, 17:36:54
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.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 07, 2016, 18:02:57
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
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 07, 2016, 18:37:51
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.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: ErichV am Februar 07, 2016, 19:54:38
Danke für die Rückmeldung.
Wenn ich etwas mehr Zeit habe, werde ich damit näher beschäftigen.  :)
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mam am Februar 07, 2016, 21:06:28
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)
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: ErichV am Februar 08, 2016, 00:10:09
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").
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: micha am Februar 08, 2016, 00:19:13
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.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 08, 2016, 07:08:56
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.

Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mam am Februar 08, 2016, 09:45:05
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.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 08, 2016, 10:02:49
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.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: ErichV am Februar 08, 2016, 12:44:02
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.  ;)
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mam am Februar 08, 2016, 13:32:41
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.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 08, 2016, 16:16:32
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.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: ErichV am Februar 08, 2016, 18:14:00
Zitat von: Mam am Februar 08, 2016, 13:32:41
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.

Das beruhigt mich.  ;)
Ja, ich glaube auch, dass hier noch mit Updates nachgebessert wird.


Zitat von: Mindwarp am Februar 08, 2016, 16:16:32
@Erich
Schon mal probiert ein Leeres *.ps1 File zu erstellen und den Sourcecode umzukopieren?

Das hat leider auch nicht weitergeholfen, ich werde es schon noch zum Laufen bringen, da bin ich mir sicher.  :)
Danke für die Überarbeitung des Tools!
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: micha am Februar 09, 2016, 20:41:06
Das neue Skript habe ich jetzt noch nicht ausprobiert. Aber das alte Skript funktioniert tatsächlich, wenn ich es auf 20s erhöhe. 10s reichen nicht.

Der MKVMerger nimmt sich Gedenksekunden, warum auch immer. Und ja. Dann wird tatsächlich mittem im Muxen eine TSDoctor[1] Instanz gestartet, die dann vor dem O.K. Klick zum Starten nicht weiter kommt. $Process.CloseMainWindow() liefert dann tatsächlich TRUE, obwohl der TSD2 noch offen ist.

Kann man das nicht irgendwie übers Handle lösen. Z. B. schauen, wenn MKVMerge nicht mehr auf die zu muxende Datei rumnudelt?
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 09, 2016, 21:22:22
Das neue Skript prüft jetzt ab, ob das Fenster und der TS-Doctor Prozess beendet ist.
Das dürfte die MKVMerge Prüfung überflüssig machen.
Ich empfehle aber, bei den ersten Tests die Vollständigkeit der neuen Datei zu prüfen.
Eventuell fehlt durch das vorzeitige Close etwas von der Videodatei.
Hatte ich zwar bisher nicht, aber besser auf Nummer sicher gehen.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mam am Februar 10, 2016, 08:16:46
Zitat von: micha am Februar 09, 2016, 20:41:06
Das neue Skript habe ich jetzt noch nicht ausprobiert. Aber das alte Skript funktioniert tatsächlich, wenn ich es auf 20s erhöhe. 10s reichen nicht.

Aaarghhhh! da rollen sich einem ja die Fußnägel auf beim Lesen  >:(

Schmeiß den Sch#"$%&&/ schnell weg und mach es richtig!

Richtig gehts mit:

* Starte Prozess / Task / Thread
* waitforinputidle() (https://msdn.microsoft.com/de-de/library/xb73d10t%28v=vs.71%29.aspx);
* schick Deine Messages raus.

Waitforinputidle() überprüft, ob die Messagequeue des gewünschten Prozesses leer ist. Also das Hauptfenster aufgebaut und die Initialisierungen abgeschlossen. In dem Zustand kann man dann beruhigt Nachrichten in der Queue ablegen und sie werden auch erhört. Genausogut kannst Du damit das Ende der Abarbeitung abwarten, schickst Du dem Doc also "erzeuge neue Datei-KLICK!" wird waitforinputidle() erst wieder zurückkommen, wenn die Datei fertig ist und der Doc auf OK wartet.

Dazu braucht man keine Sleeps usw, die sowieso nicht funktionieren, da sie bei jedem Rechner und Lastzustand ganz andere Werte haben müssen.

Ja, ist mir klar, Du möchtest das Ganze bitte mundgerecht für die Powershell (https://msdn.microsoft.com/en-us/library/system.diagnostics.process.waitforinputidle%28v=vs.110%29.aspx), null Problemo:



''' Remember that PowerShell can access .Net objects. The Start-Sleep as suggested by Blair Conrad can be replaced by a call to WaitForInputIdle of the server process so you know when the server is ready before starting the client.

$sp = get-process server-application
$sp.WaitForInputIdle()

''' You could also use Process.Start to start the process and have it return the exact Process. Then you don't need the get-process.

$sp = [diagnostics.process]::start("server-application", "params")
$sp.WaitForInputIdle()

$cp = [diagnostics.process]::start("client-application", "params")
$cp.WaitForInputIdle()



Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 10, 2016, 16:24:19
Danke für die Info.
Werde ich bei Gelegenheit ausprobieren.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 13, 2016, 16:30:17
Hatte jetzt Gelegenheit mit mit WaitForInputIdle() zu experimentierten.
1. Versuch:

   $TsDoctor = 'C:\Program Files (x86)\Cypheros\TSDoctor2\TSDoctor.exe'
   $Process = Start-Process $TsDoctor -PassThru
   $Process.WaitForInputIdle()
   [System.Windows.Forms.SendKeys]::SendWait("%wer")

crasht. Fehlermeldung:

Zugriffsverletzung bei Adresse 00897AD7 in Modul 'TSDoctor.exe'. Lesen von Adresse 000003C4.


Also scheint der TS-Doctor Prozess noch nicht gestartet zu sein.
2. Versuch

   $TsDoctor = 'C:\Program Files (x86)\Cypheros\TSDoctor2\TSDoctor.exe'
   $Process = Start-Process $TsDoctor -PassThru
   Start-Sleep -Seconds 10
   $Process.WaitForInputIdle()
   [System.Windows.Forms.SendKeys]::SendWait("%wer")
   $Process.WaitForInputIdle()
   [System.Windows.Forms.SendKeys]::SendWait('R:\Video\MKVOut\Test.ts')

Es wird beim öffnen Dialog der Laufwerksbuchstabe nicht eingegeben.
:\Video\MKVOut\Test.ts
3. Versuch:
Nochmals den Prozess einlesen.

   $TsDoctor = 'C:\Program Files (x86)\Cypheros\TSDoctor2\TSDoctor.exe'
   $Process = Start-Process $TsDoctor -PassThru
   Start-Sleep -Seconds 10
   $Process.WaitForInputIdle()
   [System.Windows.Forms.SendKeys]::SendWait("%wer")
   $TSD_Process = get-process TSDoctor
   $TSD_Process.WaitForInputIdle()
   [System.Windows.Forms.SendKeys]::SendWait('R:\Video\MKVOut\Test.ts')

Ergebnis ist das Gleiche wie beim 2. Versuch.
Scheinbar kann WaitForInputIdle() beim Doctor nicht erkennen, ob noch etwas zu tun ist.

Ich habe auch mit WaitForInputIdle(100), experimentiert.
Eine Schleife um WaitForInputIdle() gebaut und gewartet bis true zurückgegeben wird.
$Process.Refresh() hat auch nichts gebracht.
Statt Start-Process habe ich  [diagnostics.process]::start probiert.

Was mache ich falsch?
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mam am Februar 13, 2016, 16:42:04
ich vermute, Du bearbeitest den falschen Prozess.
Dieser neue "Dialog" ist keiner mehr, sondern ein eigenständiges Programm.
Du wirst es wohl nicht über den Doc erreichen können, sondern must es selber aus der Prozessliste raussuchen.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 13, 2016, 17:12:28
Habe einmal Get-Process mit TS-Doctor und mit "TS-Doctor mit Öffnen Dialog" ausgeführt (als Admin).
Die Ausgaben von Get-Process sind indentisch - habe ProcessName verglichen.

Habe keine Ahnung wie das mit Subprozessen und/oder SubWindows funktioniert.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am Februar 13, 2016, 17:43:40
Subprozesse kann man wohl so ermitteln:

Get-WmiObject -Class Win32_Process -Filter "ParentProcessID=5188"

Damit erhalte ich aber kein Ergebniss.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: micha am Februar 14, 2016, 14:08:48
Zugriffsverletzung bei Adresse XYZ gibt es seit TSD2 eh häufiger. Eine solche Fehlermeldung in Verbindung mit dem Skript erscheint z. B. jedes mal, wenn man das Skript im Betrieb abbricht sowie die dazugehörigen TSD/MKVMerger Prozesse tötet.

So verbleiben natürlich unweigerlich Dateireste im TSD2 TEMP Arbeitsverzeichnis. Die kann man auch ohne Probleme selber löschen. Auch Unlocker.exe meldet folglich, dass es keine offenen Handles mehr gibt auf die Dateien. Lässt man soche Reste aber beim Start durch den TSD2 durch dessen Abfrage löschen, kommt es jedes Mal zur Zugriffsverletzungmeldung.
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: masterflai am Dezember 17, 2016, 20:46:38
Das Script funktioniert noch immer einwandfrei. Allerdings habe ich ein Problem bei Dateinamen, welche runde Klammern enthalten.

Konkret geht es um die Variable $EinVideodatei.

Wenn der Film: Neuer Film (2016).ts heißt, dann findet sich zunächst der richtige Wert in der Variable, da vor der Übergabe an den TS Doctor die Zeile Write-Host '   Start ' $EinVideodatei zeigt, dass dort noch die runden Klammern enthalten sind.

Anschließend erfolgt die Übergabe an den Öffnen Dialog

[System.Windows.Forms.SendKeys]::SendWait($EinVideodatei)

SendKeys hat die Angewohnheit, dass runde Klammern eine Bedeutung haben und demnach werden diese interpretiert.

Wie schaffe ich es, dass der Parameter als String betrachtet wird und runde Klammern entsprechend entwertet werden?
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Moko am Dezember 19, 2016, 18:48:41
Zitat von: masterflai am Dezember 17, 2016, 20:46:38

Anschließend erfolgt die Übergabe an den Öffnen Dialog

[System.Windows.Forms.SendKeys]::SendWait($EinVideodatei)

SendKeys hat die Angewohnheit, dass runde Klammern eine Bedeutung haben und demnach werden diese interpretiert.

Wie schaffe ich es, dass der Parameter als String betrachtet wird und runde Klammern entsprechend entwertet werden?

versuche es mal damit:

   $EinVideodatei=$EinVideodatei.Replace("(","{(}")
   $EinVideodatei=$EinVideodatei.Replace(")","{)}")
   [System.Windows.Forms.SendKeys]::SendWait($EinVideodatei)



funktioniert zumindest im dem mal schnell abgeänderten Script:

  $EinVideodatei="test (2016).ts"
   $notepad= 'C:\Windows\System32\notepad.exe'
   $Process = Start-Process $notepad -PassThru
   WarteAufProcessStart $Process.Id
   [Microsoft.VisualBasic.Interaction]::AppActivate($Process.Id)
   $EinVideodatei=$EinVideodatei.Replace("(","{(}")
   $EinVideodatei=$EinVideodatei.Replace(")","{)}")
   [System.Windows.Forms.SendKeys]::SendWait($EinVideodatei)


Ausgabe im notepad: "test (2016).ts" (natürlich ohne die ")

Edith sagt: Tippfehler verbessert
Titel: Re: TS Remuxer - Batchverarbeitung mit der Powershell
Beitrag von: Mindwarp am November 10, 2021, 06:46:17
Mit TSD Version 3.2.9 haben sich die Shortcuts geändert.

Das Skript muss angepasst werden von
[System.Windows.Forms.SendKeys]::SendWait("%wer")
auf
[System.Windows.Forms.SendKeys]::SendWait("%wxr")