Probleme beim Spulen von mkv auf Standalone-Player

  • mogobime
    Besten dank!

    Die Zeilenumbrüche habe ich nur in der Vorlage-Batch drinn, damit ich die leichter anpassen kann, am Ende kommen diese auch in eine Zeile. Ich hab mal gelesen dass Zeilenumbrüche innerhalb von Kommandos mit "^" gehen sollen...hat mal funktioniert, mal nicht...

  • Oder damit, ob vor oder nach dem NL-Escape noch ein Leerzeichen zur Trennung der Parameter übrigbleibt. Es wird ja der Zeilenumbruch dadurch entfernt. Dennoch muss "als Ersatz" noch ein Leerzeichen zur Trennung bleiben, sonst werden die Parameter vielleicht lückenlos aneinandergeklebt und lassen sich nicht mehr unterscheiden.

    Optisch macht sich das vielleicht am Anfang der nächsten Zeile gut, da sieht man durch die Einrückung gleich, dass es sich hier um einen Block handelt.

  • Das ganze hat nur den Haken, dass ich nicht weiß, welche Optionen in die Optionsdatei dürfen. Immerhin ist ja die Reihenfolge wichtig, und da müssten ja irgendwie ein paar davon vor der ersten Input-Datei stehen und andere wieder danach. So einfach wird es also wohl nicht...

    Alle Parameter müssen da rein, also auch Ein- und Ausgabedateinamen. Dann hat sich das Problem mit der Reihenfolge auch erklärt. Außerdem kommen Zeilenumbrüche für fast jedes Leerzeichen. (Ausnahme sind Zeilenumbrüche in Zeichenketten.) Wenn man das wirklich nutzen will, am besten in die Docs reinschauen, da ist alles erklärt.

    Lapje

    Es muß "--clusters-in-meta-seek" und nicht "--engage clusters-in-meta-seek" sein.

    Ansonsten mal die Dateinamen prüfen - ich weiß nicht, wie genau das ganze jetzt mit StaxRip oder .bat aufrufst, aber auch darauf achten, daß die Pfade alle korrekt sind. Nicht, daß er versucht im StaxRip-Verzeichnis zu schreiben oder die Namen nicht richtig eingefügt werden.

    mogobime

    Die runden Klammern in Deinem mkvmerge-Aufruf beenden vermutlich die for-Schleife vorzeitig.

    Einmal editiert, zuletzt von sneaker2 (9. April 2013 um 09:38)

  • Wenn dann der Aufruf also nur "mkvmerge @%%~ni.opt" in der Schleife lauten wird, dann freut mich das ungemein. Die Doku zur Optionsdatei hatte ich noch nicht gefunden und Angst gehabt, dass mkvmerge nicht mitmacht, weil der notwendige Parameter -o in der aufrufenden Kommandozeile fehlen würde; aber wenn auch der in der Optionsdatei drinsteht, klappt das natürlich.

  • Zitat

    Die runden Klammern in Deinem mkvmerge-Aufruf beenden vermutlich die for-Schleife vorzeitig.

    Meiner ist es ja nicht ;)
    Hab den Aufruf an sich nicht verändert. Aber das stimmt schon, die Klammern müssten eigentlich auch escaped werden.
    Ich persönlich hätte das ganze vermutlich eh mit einem call-Aufruf gelöst und nicht so viel in die FOR-Schleife geschrieben, da diese ja lediglich benötigt wird um den dateinamen aus dem DIR-Befehl zu parsen:


    Jetzt sollte das ganze eigentlich auch gehen, ohne die Klammern zu escapen. Die Zeilenumbrüche hab ich jetzt mal in ruhe gelassen.

    2 Mal editiert, zuletzt von mogobime (9. April 2013 um 21:32)

  • :D CALL :label ist ein hervorragender Trick, in etwa vergleichbar mit dem GOSUB in BASIC.

    So kannst du dir in der FOR-Schleife sogar noch die Klammern um den Aufruf herum sparen, denke ich. Die brauchte man ja vorher nur, weil der Aufruf mehrzeilig war bzw. in einer eigenen Zeile stand.

  • yup, die Klammern können weg, hab ich mir aber aus Gründen der Übersichtlichkeit so angewöhnt, dann sieht man immer wo die for-schleife endet. Man könnte ja auch anfangen mehrere Befehlszeilen mit & zu verketten (was ich aber auch nur mache, enn es wirklich der besseren Übersichtlichkeit dient, ist eigentlich eher unschön, wenn auch in ein paar speziellen Fällen unumgänglich...)

  • Darf ich mal was sagen? Ich hab keine Ahnunf mehr wovon ihr da schreibt...^^

    Und ich war so stolz dass das ganze funktionierte....

    Mich würde aber dabei noch interessieren wie ich bei der Abfrage die Zeilenüche escapen kann?

    Ich habe das mit dem "^" und Leerzeichen ausprobiert...aber davor? Dahinter? Zusätzlich zu dem schon vorhandenen Leerzeichen?

  • ich versteh nicht warum du die Zeilenumbrüche undbedingt escapen willst, da man Werte, die man häufig ändert normalerweise besser per parameter an die batch übergibt, oder sie z.B. per set /p "variablenname=" abfragen kann.
    Das Problem an deinem Skript ist eher, dass du Klammern innerhalb der Klammern der FOR-Schleife verwendet hast. Das müßte imho dazu führen, dass der cmd-interpreter denkt:
    Hier ist die Schleife zuende. Deswegen ist es besser aus der FOR-Schleife heraus ein Unterprogramm bzw. eine Funktion aufzurufen.
    Der Beginn der Funktion wird hier mit :CLI (ein beliebiges label) markiert, das ende mit goto :EOF
    Dazwischen kannst du jetz fast beliebig erweitern.

    Der Dateiname deines mkv-files wurde ohne Dateiendung mit dem call-Aufruf an das Unterprogramm in die Variable %file% übergeben, d.h. du kannst %file% in der Funktion :CLI genauso verwenden wie zuvor %%~ni.

    Wenn du unbedingt escapen willst, sollte das so funktionieren:

    befehl parameter1 parameter2 ^
    parameter3

  • dass das nachfolgende Zeichen durch einen escape aufgehoben wird ist nicht ganz richtig. mit dem escape bringt man batch eher dazu ein nachfolgendes zeichen, welches normalerweise eine Funktion hat, als normales Zeichen zu interpretiren.
    Probier mal echo ^(

    Aber ich finde escapen sollte man besser vermeiden, wann immer es geht...

    Lapje
    ich hoffe ich hab dich jetzt nicht komplett verwirrt :)

  • Ich hab das Gefühl, dass ich ihn verschreckt hab.
    Wenn man da mal angefangen hat zu überlegen, gibt's kein halten mehr... :indecisiveness:

    3 Mal editiert, zuletzt von mogobime (10. April 2013 um 08:15)

  • Ja, ich bin schon seit geeraumer Zeit ausgestiegen...ich kenne mich zwar in PHP aus (würde mich da als giten Fortgeschrittenen bezeichnen) und fange jetzt mit Java an, aber das hier sind dann doch sie brühmten Dörfer aus Böhmen...^^

  • Also ... so weit bin ich gekommen; keine Gewähr, am besten prüft mal noch jemand vorher.

    Code
    [size=8]@ECHO offSET "ziel=%~1"IF "%1"=="" SET "ziel=%cd%"REM #### Wenn kein Ziel-Pfad als Parameter angegeben wurde, wird der aktuelle ausgelesen ####FOR /F "tokens=1 delims=" %%a IN ('DIR /B *.mkv') DO CALL :CLI "%%~na"REM #### System automatisch runterfahren ####REM shutdown -s -t 60PAUSEEXITREM #### Unterprogramm-Schleife ####:CLISET "file=%~1"REN "%file%.mkv" "Quellvideo.mkv_temp"REM #### Video kodieren crf ####"C:\Programme\StaxRip\Applications\x264\x264.exe" "AVS-DATEI.avs" --output "%file%.h264" --preset slow --tune film --profile high --level 4.1 --crf 18REM #### Quellvideo zurückbenennen ####REN "Quellvideo.mkv_temp" "%file%.mkv"REM #### Mergen ####REM #### 1. generelle Optionen ####ECHO --clusters-in-meta-seek > "%file%.opt"ECHO --disable-lacing >> "%file%.opt"ECHO --engage no_cue_duration >> "%file%.opt"ECHO --engage no_cue_relative_position >> "%file%.opt"ECHO --engage no_simpleblocks >> "%file%.opt"ECHO --track-order 0:0,1:0,2:0,3:0,4:0 >> "%file%.opt"REM #### 2. Ausgabedatei ####ECHO -o "%ziel%\%file%.mkv" >> "%file%.opt"REM #### 3.1 Videotrack-Optionen ####ECHO --language 0:ger >> "%file%.opt"ECHO --track-name 0:"%file%" >> "%file%.opt"ECHO --forced-track 0:no >> "%file%.opt"ECHO --display-dimensions 0:1920x1080 >> "%file%.opt"ECHO --default-duration 0:24p >> "%file%.opt"ECHO --compression 0:none >> "%file%.opt"ECHO -d 0 >> "%file%.opt"ECHO -A >> "%file%.opt"ECHO -S >> "%file%.opt"ECHO -T >> "%file%.opt"ECHO --no-global-tags >> "%file%.opt"ECHO --no-chapters >> "%file%.opt"ECHO ="%file%.h264" >> "%file%.opt"REM #### Das = verhindert, dass Episoden einer Serie zusammengefasst werden ####REM #### 3.2a Audiotrack-Optionen ####ECHO --language 0:ger >> "%file%.opt"ECHO --track-name 0:"%file% Ger" >> "%file%.opt"ECHO --forced-track 0:no >> "%file%.opt"ECHO --compression 0:none >> "%file%.opt"ECHO -a 0 >> "%file%.opt"ECHO -D >> "%file%.opt"ECHO -S >> "%file%.opt"ECHO -T >> "%file%.opt"ECHO --no-global-tags >> "%file%.opt"ECHO --no-chapters >> "%file%.opt"ECHO ="%file%_ger.dts" >> "%file%.opt"REM #### 3.2b Audiotrack-Optionen ####ECHO --language 0:eng >> "%file%.opt"ECHO --track-name 0:"%file% Eng" >> "%file%.opt"ECHO --forced-track 0:no >> "%file%.opt"ECHO --compression 0:none >> "%file%.opt"ECHO -a 0 >> "%file%.opt"ECHO -D >> "%file%.opt"ECHO -S >> "%file%.opt"ECHO -T >> "%file%.opt"ECHO --no-global-tags >> "%file%.opt"ECHO --no-chapters >> "%file%.opt"ECHO ="%file%_eng.dts" >> "%file%.opt"REM #### 3.3a Subt.-Track-Optionen ####ECHO --language 0:ger >> "%file%.opt"ECHO --track-name 0:"%file% Ger" >> "%file%.opt"ECHO --forced-track 0:no >> "%file%.opt"ECHO -s 0 >> "%file%.opt"ECHO -D >> "%file%.opt"ECHO -A >> "%file%.opt"ECHO -T >> "%file%.opt"ECHO --no-global-tags >> "%file%.opt"ECHO --no-chapters >> "%file%.opt"ECHO ="%file%_ger.sup" >> "%file%.opt"REM #### 3.3b Subt.-Track-Optionen ####ECHO --language 0:eng >> "%file%.opt"ECHO --track-name 0:"%file% Eng" >> "%file%.opt"ECHO --forced-track 0:no >> "%file%.opt"ECHO -s 0 >> "%file%.opt"ECHO -D >> "%file%.opt"ECHO -A >> "%file%.opt"ECHO -T >> "%file%.opt"ECHO --no-global-tags >> "%file%.opt"ECHO --no-chapters >> "%file%.opt"ECHO ="%file%_eng.sup" >> "%file%.opt"REM #### 4. Aufruf ####"C:\Programme\MKVtoolnix\mkvmerge.exe" @"%file%.opt"REM #### 5. Aufräumen (zum Debuggen auskommentieren)REM DEL "%file%.opt"GOTO :EOF[/size]

    Dabei entstehen dann Optionsdateien mit solchen Inhalten:

  • Siehe doc.

    :hm: Vielen Dank für den Link ... ich hatte ja schon geschrieben, dass ich mir 'nen Wolf suche.

    Das nächste Mal vielleicht einfach bloß knapp: :rtfm:
    __

    Mittlerweile bin ich dahinter gekommen, dass ich Kapitel 8 dauernd übersehen habe.

    Das wird dann schon etwas schwieriger, wenn der Ausgabepfad mit Doppel-Backslashs im C-Stil umgeschrieben werden muss. Das wird in Batch nicht gerade trivial, oder?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!