Batch-File zum Auslesen von Playlist für VLC
Mein Problem ist folgendes:
VLC soll eine playliste mit streams abarbeiten und die streams einzeln speichern.
C:\Video\VLC\vlc.exe -vvv D:\Audio\play.m3u --sout file/ps:D:\Audio\MP3\Datei.ps
Die Zeile wird prompt erledigt, VLC arbeitet die *.m3u ab, überschreibt aber immer wieder die "Datei.ps"
Das Problem in dieser Befehlszeile ist also die "Datei.ps", wofür ich den Namen gern aus der play.m3u auslesen lassen möchte.
Habe mich schon versucht:
for /F "eol=; tokens=1*" %%A IN D:\Audio\play.m3u do ('C:\Video\VLC\vlc.exe -vvv %%A --sout file/ps:D:\Audio\MP3\%%~nA.ps')
aber ernte nur Syntaxfehler: "D:\Audio\play.m3u kann hier nicht verwendet werden."
Die Liste enthält 20 Zeilen, pro Job beschreiben zwei Zeilen den stream
#EXTINF:0,131. heute Morgen 03.01.2010
http://ondemand-mp3.+++1c.mp3
Habe die Datei (*.m3u) auch geteilt geteilt in Quelle (http) und Ziel (name), alles ohne den gewünschten Erfolg.
OS ist WinXP
Vielen Dank für Eure Hilfe.
VLC soll eine playliste mit streams abarbeiten und die streams einzeln speichern.
C:\Video\VLC\vlc.exe -vvv D:\Audio\play.m3u --sout file/ps:D:\Audio\MP3\Datei.ps
Die Zeile wird prompt erledigt, VLC arbeitet die *.m3u ab, überschreibt aber immer wieder die "Datei.ps"
Das Problem in dieser Befehlszeile ist also die "Datei.ps", wofür ich den Namen gern aus der play.m3u auslesen lassen möchte.
Habe mich schon versucht:
for /F "eol=; tokens=1*" %%A IN D:\Audio\play.m3u do ('C:\Video\VLC\vlc.exe -vvv %%A --sout file/ps:D:\Audio\MP3\%%~nA.ps')
aber ernte nur Syntaxfehler: "D:\Audio\play.m3u kann hier nicht verwendet werden."
Die Liste enthält 20 Zeilen, pro Job beschreiben zwei Zeilen den stream
#EXTINF:0,131. heute Morgen 03.01.2010
http://ondemand-mp3.+++1c.mp3
Habe die Datei (*.m3u) auch geteilt geteilt in Quelle (http) und Ziel (name), alles ohne den gewünschten Erfolg.
OS ist WinXP
Vielen Dank für Eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143089
Url: https://administrator.de/contentid/143089
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
25 Kommentare
Neuester Kommentar
Hallo max5moritz und willkommen im Forum!
Das scheitert zunächst schon an der Syntax der "
Zunächst wird die Adresse am Stück ausgelesen (%%A) und dann anhand der Punkte zerlegt und nur der 2. Bestandteil (somit im Beispiel oben "+++1c") als %%i ermittelt - dies alles aber nur für die Zeilen, die mit "http" (oder auch etwa "Http" - deshalb zur Sicherheit "
Grüße
bastla
Das scheitert zunächst schon an der Syntax der "
for
"-Schleife, und dann auch daran, dass ja nur jede zweite Zeile (dh jede, die mit "http" beginnt) verarbeitet werden soll - demzufolge sollte es eher so gehen:for /F "delims=" %%A IN ('findstr /i /b "http" "D:\Audio\play.m3u"') do for /f "tokens=2 delims=.) %%i in ("%%A") do "C:\Video\VLC\vlc.exe" -vvv "%%A" --sout file/ps:D:\Audio\MP3\%%i.ps
findstr /i
") beginnen ...Grüße
bastla
Hallo bastla,
sieht gut aus. Ich wusste gar nicht das einen die Command line options von VLC glatt erschlagen können, evtl muss man noch
Gruß
LotPings
sieht gut aus. Ich wusste gar nicht das einen die Command line options von VLC glatt erschlagen können, evtl muss man noch
--play-and-exit
anhängen damit er sich beendet, ggfs ist auch noch ein vorangestelltes Start /wait nötig.Gruß
LotPings
Hallo max5moritz,
Ich glaube eher, dein Editor hat dir ein Schnippchen geschlagen und aus einigen " ein " gemacht.
@bastla, ich hoffe ich funke dir nicht dazwischen
Gruß
LotPings
Ich glaube eher, dein Editor hat dir ein Schnippchen geschlagen und aus einigen " ein " gemacht.
@bastla, ich hoffe ich funke dir nicht dazwischen
Gruß
LotPings
Ich wußte ja auch vorher nicht,
wie sich bei dir verhält.
Hast du es denn mit
Gruß
LotPings
wie sich bei dir verhält.
Hast du es denn mit
--play-and-exit
versucht ?Gruß
LotPings
Servus,
for /F "delims=" %%A IN ('findstr /i /b "http" "D:\Audio\quelle.txt"') do for /f "tokens=2 delims=_" %%i in ("%%A") do "C:\Video\VLC\vlc.exe" -vvv --play-and-exit "%%A" --sout file/ps:"D:\Audio\MP3\Audio\%%~ni.ps"
Sag mal, den Link zu den command line opttions hast du doch auch gesehen?
Ihn zu finden war nicht schwer, die Liste durchzugehen auch nicht - nur ziemlich lang.
und da gibt es auch noch andere Einträge,
man hat schon langsam das Gefühl das man dich zu deiner Lösung hin tragen muss
Versuchs mal mit
BTW: vielleicht hast du bemerkt das die von anderen geposteten Codes besser lesbar sind als deine,
also bitte formatiere deinen Code zur besseren Les-/Referenzier-barkeit unbedingt mit den dafür vorgesehenen aus der Formatierungshilfe
Was du jetzt hier als Name betrachtest müßtest du noch erklären.
Gruß
Lotpings
Ihn zu finden war nicht schwer, die Liste durchzugehen auch nicht - nur ziemlich lang.
und da gibt es auch noch andere Einträge,
--play-and-exit, --no-play-and-exit
Play and exit (default disabled)
Exit if there are no more items in the playlist. (default disabled)
--play-and-stop, --no-play-and-stop
Play and stop (default disabled)
man hat schon langsam das Gefühl das man dich zu deiner Lösung hin tragen muss
Versuchs mal mit
--no-play-and-exit
BTW: vielleicht hast du bemerkt das die von anderen geposteten Codes besser lesbar sind als deine,
also bitte formatiere deinen Code zur besseren Les-/Referenzier-barkeit unbedingt mit den dafür vorgesehenen aus der Formatierungshilfe
Wie kann ich also die Schleife so ändern, dass sowohl die Quelle als auch der Name sauber verarbeitet werden?
#EXTINF:0,117. Am Morgen 17.01.2010
http://ondemand-mp3.100117_0835_7f0.mp3
Gruß
Lotpings
Hallo LotPings!
Grüße
bastla
@bastla, ich hoffe ich funke dir nicht dazwischen
Ganz im Gegentum - ich habe ohnehin gerade nicht so viel Zeit übrig (oben hat's nicht einmal mehr für das schließende Anführungszeichen gereicht ), daher bringe ich derzeit meist nur Ansätze zustande und freue mich, wenn Du das Ganze optimierst / finalisierst / von einer anderen Seite her noch besser hinkriegst ... Grüße
bastla
Zitat von @max5moritz:
Danke für die Antwort, doch das Ergebins ist nicht okay.
--play-and-exit steht dann im Widerspruch zu --sout. Dadurch bleibt der VLC ruhig und lädt die Datei in nur ca. 15 s.
Bei --play-and-exit spielt er diese ab, was dann solange dauert, wie diese lang ist.
Danke für die Antwort, doch das Ergebins ist nicht okay.
--play-and-exit steht dann im Widerspruch zu --sout. Dadurch bleibt der VLC ruhig und lädt die Datei in nur ca. 15 s.
Bei --play-and-exit spielt er diese ab, was dann solange dauert, wie diese lang ist.
Moin,
da wir ja alle etwas rätseln, was denn in der Liste steht - konnte das keiner wissen....
Dein Problem liegt also darin, dass du in einer .m3u mehrere Streams hast und du Vlc seriell mit einem Stream der Liste startest.
Du mußt also pro fund "http" in deiner Liste den VLC mit diesem Fund füttern.
Ist jetzt nur die Frage, wieviele Einträge dadrin sind und ob deine Leitung das parallele starten und saugen von x Streams gleichzeitig beherrscht.
Gruß
Moin max5moritz,
Ich versuch noch mal ein wenig Feintuning an der Codeformatierung...
Deine anderen Detaillierungen zitiere ich mal vollständig mit.
... und eigentlich müsste sich die elend lange VLC-Parameterlister auch noch umbrechen lassen,
wenn der CMD.exe ein "nicht zu beachtender Zeilenumbruch" durch ein "Caret plus ENTER",
sichtbar im Code als "^" am Zeilenende untergejubelt wird.
Dieses "Feature" verwende ich auch nur in Notfällen, aber das hier ist einer.
Grüße
Biber
Ich versuch noch mal ein wenig Feintuning an der Codeformatierung...
Deine anderen Detaillierungen zitiere ich mal vollständig mit.
Zitat von @max5moritz:
Hallo,
Danke für Eure Mühe.
Die Liste enthält 20 Zeilen die wie folgt untereinander stehen:
Der Name soll sein ab
Parallel wäre möglich, aber nicht nötigt, da das Laden einer einzelnen Datei mit transcode ca. 20-25 s dauert.
läßt das VLC-Fenster auch offen.
Ich habe mal folgendes probiert:
...
Dadurch wird VLC im Terminal ausgeführt, das heißt, es öffnet sich ein Terminal-Fenster, mit entsprechenden
Ausgaben, was VLC gerade macht. Nun wartet aber VLC auf den Befehl:
Schließe ich jetzt dieses Ausgabe-Fenster am "x", kommt im BAT-Terminal-Fenster die Frage:
Sage ich N, geht die Schleife weiter. Das heißt das Problem, alle Stream nach einander abzuarbeiten, ist nicht besser
geworden, aber vielleicht jetzt lösbarer?
Nochmal die komplette Schleife:
Hallo,
Danke für Eure Mühe.
Die Liste enthält 20 Zeilen die wie folgt untereinander stehen:
#EXTINF:0,117. Am Morgen 17.01.2010http://ondemand-mp3.100117_0835_7f0.mp3
Der Name soll sein ab
"Am Morgen 17.01.2010"
Parallel wäre möglich, aber nicht nötigt, da das Laden einer einzelnen Datei mit transcode ca. 20-25 s dauert.
--no-play-and-exit
läßt das VLC-Fenster auch offen.
Ich habe mal folgendes probiert:
...
"C:\Video\VLC\vlc.exe" --intf dummy "%%A"
...Dadurch wird VLC im Terminal ausgeführt, das heißt, es öffnet sich ein Terminal-Fenster, mit entsprechenden
Ausgaben, was VLC gerade macht. Nun wartet aber VLC auf den Befehl:
VLC -I qt
Schließe ich jetzt dieses Ausgabe-Fenster am "x", kommt im BAT-Terminal-Fenster die Frage:
^CBatchvorgang abbrechen <J/N>?
Sage ich N, geht die Schleife weiter. Das heißt das Problem, alle Stream nach einander abzuarbeiten, ist nicht besser
geworden, aber vielleicht jetzt lösbarer?
Nochmal die komplette Schleife:
for /F "delims=" %%A IN ('findstr /i /b "http" "D:\audio\quelle.txt"') do (
for /f "tokens=2 delims=_" %%i in ("%%A") do (
"C:\Video\VLC\vlc.exe" --intf dummy "%%A" :sout=#transcode{acodec=mp3,ab=64,channels=1}:duplicate{dst=std{access=file,mux=raw,dst=D:\Medien\Audio\%%~ni.mp3}}
)
)
wenn der CMD.exe ein "nicht zu beachtender Zeilenumbruch" durch ein "Caret plus ENTER",
sichtbar im Code als "^" am Zeilenende untergejubelt wird.
Dieses "Feature" verwende ich auch nur in Notfällen, aber das hier ist einer.
for /F "delims=" %%A IN ('findstr /i /b "http" "D:\audio\quelle.txt"') do (
for /f "tokens=2 delims=_" %%i in ("%%A") do (
"C:\Video\VLC\vlc.exe" ^
--intf dummy "%%A" ^
:sout=#transcode{acodec=mp3,ab=64,channels=1}^
:duplicate{dst=std{access=file,mux=raw,dst=D:\Medien\Audio\%%~ni.mp3}}
)
)
Grüße
Biber
Hallo @all!
Da ja nun jeweils 2 Zeilen zu verabeiten sind, ein neuer (ungetesteter) Ansatz:
Grüße
bastla
Da ja nun jeweils 2 Zeilen zu verabeiten sind, ein neuer (ungetesteter) Ansatz:
@echo off & setlocal
set "Datei=D:\audio\quelle.txt"
for /f "usebackq delims=" %%i in ("%Datei%") do call :ProcessLine "%%i"
goto :eof
:ProcessLine
echo %~1|findstr /b "#EXTINF" && (for /f "tokens=1* %%a in (%1) do set "Name=%%b" & goto :eof)
for /f "tokens=2 delims=_" %%i in (%1) do (
"C:\Video\VLC\vlc.exe" ^
--intf dummy %1 ^
:sout=#transcode{acodec=mp3,ab=64,channels=1}^
:duplicate{dst=std{access=file,mux=raw,dst="D:\Medien\Audio\%Name%.mp3"}}
)
goto :eof
bastla
Hallo max5moritz!
Dann also eher:
Die Anführungszeichen waren eigentlich so gemeint, wie ich sie gesetzt habe ...
Zum Thema
Grüße
bastla
[Edit] Hoffentlich alle Flüchtigkeitsfehler wieder korrigiert [/Edit]
Dann also eher:
@echo off & setlocal
set "Datei=D:\audio\quelle.txt"
for /f "usebackq delims=" %%i in ("%Datei%") do call :ProcessLine "%%i"
goto :eof
:ProcessLine
echo %~1|findstr /b "#EXTINF" && (for /f "tokens=1* %%a in (%1) do set "Name=%%b" & goto :eof)
for /f "tokens=2 delims=_" %%i in (%1) do (
"C:\Video\VLC\vlc.exe" --intf dummy %1 :sout=#transcode{acodec=mp3,ab=64,channels=1}:duplicate{dst=std{access=file,mux=raw,dst="D:\Medien\Audio\%Name%.mp3"}}
)
goto :eof
Zum Thema
Die BAT schließt das Fenster so schnell, dass ich nichts erkennen kann
Batches solltest Du sinnvoller Weise direkt aus einer CMD-Shell starten - dann kannst Du auch Fehlermeldungen in Ruhe lesen (mehr dazu habe ich heute hier schon mal angemerkt) ...Grüße
bastla
[Edit] Hoffentlich alle Flüchtigkeitsfehler wieder korrigiert [/Edit]
Hallo max5moritz,
dein spätes herausrücken von wesentlichen Information und das ständige vermurksen der Anführungszeichen lässt einen schon die Lust verlieren.
In deinen Konkreten
Gruß
Lotpings
PS so richtig klappt das bei dir mit den < code > und </ code > Tags aber noch nicht.
dein spätes herausrücken von wesentlichen Information und das ständige vermurksen der Anführungszeichen lässt einen schon die Lust verlieren.
In deinen Konkreten
Extifnf
Zeilen kommen für den Namen unzulässige Doppelpunkte vor. ich hab das jetzt noch mal alles glattgebügelt und hier sieht die nur per Echo ausgegebene Zeile ok aus - prüf das mal selber und wenn es richtig erscheint entferne das echo in Zeile 14.@echo off
cls
setlocal
set "Datei=D:\audio\quelle.txt"
for /f "usebackq delims=" %%i in ("%Datei%") do call :ProcessLine "%%i"
goto :eof
:ProcessLine
echo %~1|findstr /b "#EXTINF" && (
for /f "tokens=1*" %%a in (%1) do set "Name=%%b" & goto :eof)
Set "Name=%Name::=_%"
for /f "delims=" %%i in (%1) do (
Echo "C:\Video\VLC\vlc.exe" ^
--intf dummy %1 ^
:sout=#transcode{acodec=mp3,ab=64,channels=1}^
:duplicate{dst=std{access=file,mux=raw,dst="D:\Medien\Audio\%Name%.mp3"}}
)
goto :eof
Gruß
Lotpings
PS so richtig klappt das bei dir mit den < code > und </ code > Tags aber noch nicht.
Salü,
nimm dir doch bitte mal ein bisserl Zeit und schau dir nicht nur die Bisherigen Zeilen an, sondern zitiere die mal um herauszufinden, wie "wir" Text so schreiben, dass der lesbar ist.
Gruß
nimm dir doch bitte mal ein bisserl Zeit und schau dir nicht nur die Bisherigen Zeilen an, sondern zitiere die mal um herauszufinden, wie "wir" Text so schreiben, dass der lesbar ist.
Klick mich
#EXTINF:0,143. Am Sonntagmorgen: Willi Fährmann zum 80. Geburtstag 20.12.2009
http://ondemand-mp3.dradio.de/file/dradio/2009/12/20/dlf_20091220_0835_be89765a.mp3
#EXTINF:0,150. Lichterglanz und Stille 13.12.2009
http://ondemand-mp3.dradio.de/file/dradio/2009/12/13/dlf_20091213_0835_810df7e4.mp3
Gruß
Zitat von @max5moritz:
Eine andere Idee wäre:
Nur wie ich den Befehl
Der würde ja normal in der m3u stehen,Eine andere Idee wäre:
vlc:quit
Nur wie ich den Befehl
vlc:quit
direkt in die BAT einbaue, das weiss ich leider nicht.hänge ihn doch mal versuchsweise einfach hinter dem
:Sout...
hinten an.Gruß
Lotpings