2017-04-20 2 views
0

Ich möchte parallel den Befehl, der einen Live-Stream lädt, verarbeiten. Also wenn es 4 Teile hat und die PARTS Variable die Nummer 4 enthält, sollte es 4 neue cmd Fenster öffnen und den einzelnen Teil bearbeiten.Parallele Verarbeitung mit Pipe-Befehl

Nach viel über den parallelen Verarbeitung Liest ich zu folgenden Lösung gekommen:

set /p URL=Enter video URL: 
set /p NAME=Enter video name: 
set /p PARTS=Enter Number of Parts: 

for /l %%x in (1, 1, %PARTS%) do (
    start cmd /C "C:\Program Files (x86)\Streamlink\bin\streamlink.exe" -O "%URL%/%%x" best | ffmpeg -y -i pipe:0 -c:v copy -c:a copy -absf aac_adtstoasc "%NAME%p%%x.mp4" 
) 

Es scheint allerdings ein Problem mit dem | Befehl zu sein, da diese Skript Fenster öffnen würde, die direkt nach dem Start und dem Ausgang schließen des Piped-Befehls würde im ursprünglichen cmd-Fenster angezeigt, das das Skript ausgeführt hat.

Wie kann ich es so den ganzen Befehl ändern wird im neuen Fenster ausgeführt?

+2

setzen ein anderes Paar von Anführungszeichen um den gesamten Befehlszeile ausgeführt werden: 'starten cmd/C "" C: \ Program Files (x86) \ Streamlink \ bin \ streamlink.exe "-O" % URL%/%% x“best | ffmpeg -y -i Rohr: 0 -c: v kopieren -c: eine Kopie -absf aac_adtstoasc "% NAME% p %% x.mp4" "' – Stephan

+0

Dies wirft'" \ Streamlink \ bin \ Streamlink. exe "Kann nicht an dieser point.' verarbeitet syntaktisch werden – maddo7

+2

leid - Flucht der Schließung)' ':' starten cmd/C "" C: \ Program Files (x86 ^) \ Streamlink \ bin \ streamlink.exe" -O" URL%%/%% x "best | ffmpeg -y -i Rohr: 0 -c: v kopieren -c: eine Kopie -absf aac_adtstoasc "% NAME% p %% x.mp4"" ' – Stephan

Antwort

2

zur Rohr Prozess der Ausgabe des start Befehls nicht zulassen, müssen Sie es entkommen:

start "" cmd /C "C:\Program Files (x86)\Streamlink\bin\streamlink.exe" -O "%URL%/%%x" best ^| ffmpeg -y -i pipe:0 -c:v copy -c:a copy -absf aac_adtstoasc "%NAME%p%%x.mp4" 

Da Zitat auf diese Weise nicht geändert wird, noch der verwendeten Pfad und alle variablen Teile zitiert erscheinen auch an den rufenden cmd Instanz, so dass nicht mehr zusätzliche Entkommen erforderlich ist, es sei denn, diese Strings in Anführungszeichen auf ihre eigenen enthalten kann, in welchem ​​Fall ich delayed expansion dringend empfohlen:

setlocal EnableDelayedExpansion 

rem // some other code... 

set /P URL="Enter video URL: " 
set /P NAME="Enter video name: " 

rem // some other code... 

start "" cmd /C "C:\Program Files (x86)\Streamlink\bin\streamlink.exe" -O "!URL!/%%x" best ^| ffmpeg -y -i pipe:0 -c:v copy -c:a copy -absf aac_adtstoasc "!NAME!p%%x.mp4" 

rem // some other code... 

endlocal 

Die "" hinter dem start Befehl angegeben werden, sollte ein Fenster Titel zur Verfügung zu stellen; Andernfalls könnte ein Fehler auftreten, da das erste in Anführungszeichen gesetzte Element als Titel und nicht als Teil der Befehlszeile verwendet wurde.

Die obige Zeile kann immer noch Probleme verursachen, da die cmd Instanz, die die eigentlichen Befehle ausführt, die bereits erweiterten Werte anstelle der Variablen empfängt. Sie könnten also auch dies tun müssen:

rem // Supposing delayed expansion is disabled in the hosting `cmd` instance: 
start "" cmd /C /V "C:\Program Files (x86)\Streamlink\bin\streamlink.exe" -O "!URL!/%%x" best ^| ffmpeg -y -i pipe:0 -c:v copy -c:a copy -absf aac_adtstoasc "!NAME!p%%x.mp4" 

setlocal EnableDelayedExpansion 

rem // Supposing delayed expansion is enabled in the hosting `cmd` instance: 
start "" cmd /C /V "C:\Program Files (x86)\Streamlink\bin\streamlink.exe" -O "^!URL^!/%%x" best ^| ffmpeg -y -i pipe:0 -c:v copy -c:a copy -absf aac_adtstoasc "^!NAME^!p%%x.mp4" 

endlocal 

Beachten Sie, dass das Rohr | zwei eine weitere cmd Instanzen schafft für beide Seiten, implizit.

Verwandte Themen