Batch Problem in einer For Schleife um alle \ in \\ zu ändern in einem String

  • Hallo ^^

    Ich habe folgendes Problem: Und zwar habe ich eine Batch erstellt die mir eine Jobliste für VirtualDub erstellt.
    Allerdings tut sich da folgendes Problem auf was ich nicht ohne Hilfe irgendwie lösen kann.

    Die Batch läd alle AVI Datein die im Verzeichnis sind und erstellt daraufhin eine Jobliste für Virtualdub um die zweite Soundspur zu extrahieren (Sprich in WAV zu speichern)

    Nur sitze ich jetzt an das Problem das in diesem JobSkript von Virtual Dub die Pfade durch ein \\ angegeben werden anstatt mit \ wie ich sie abrufen kann.

    Ich weiß das ich ein String ändern kann indem ich set a=%a:\=\\% schreibe
    Bringt mir nur nix da ich das ganze wie gesagt mit einer Schleife mache

    So sieht das ganze momentan aus:

    Code
    SET FILEEXT=.avi
    set /p="VirtualDub.Open("<nul > __vdjob.jobs.txt
    for %%f in (*%FILEEXT%) do set /p=""%%~df%%~pf%%f","",0); VirtualDub.audio.SetSource(1,1); VirtualDub.SaveWAV("%%~df%%~pf%%f_Track02.wav"); VirtualDub.Close();"<nul >> __vdjob.jobs.txt

    Das .txt hab ich nur zur schnelleren Kontrolle drangehangen und sollte das Problem nicht beeinflussen. Vielmehr frag ich mich ob ich in der Schleife noch irgendwas fehlt damit ich aus den geladenen Pfaden aus \ ein \\ machen kann.

    Hoffe ihr könnt mir da helfen ^^

  • Wer in einer Schleife viele Zeilen ausführen muss, der arbeitet am besten vielleicht mit einem "Unterprogramm", also entweder "intern" (mit dem Aufruf eines Sprungzieles mit CALL in der Schleife) oder "extern" (mit dem Selbst-Aufruf der Batch-Datei = "%0" und Parametern mit CALL in der Schleife, wobei am Anfang eine Verzweigung nach Parameteranzahl stattfindet).

  • Werde ich das nächste mal probieren. Habe heute noch eine schier einfache Lösung gefunden. Und da muss ich sagen: "mich selbst facepalm" xD

    Weil ich nutze jetzt nur noch die Dateinamen ohne Pfad. Sobald ich eine AVI jetzt in die Batch ziehe, speichert mir die Batch nun aus allen AVI Datein die 2 Audiospur herraus. Ziel erfüllt. ^^

    Daraus konnte ich nun eine Batch schreiben die mir dann ein Skript erzeugt im gleichen Verzeichnis wie die Videos. Also alles lief einwandfrei im gleichen Ordner, obwohl die Batch halt woanders liegt ^^

    Daraus ist dann halt sowas entstanden:

    Die Batch erzeugt mir nun aus allen AVIs egal welche FPS und Auflösungen diese haben ein einziges Video. Videos die nicht der Zielauflösung entsprechen werden korrigiert.
    Das wollte ich für Lets Plays dann nutzen. Also ohnehin nur für Lossless Codecs. Nur das die Batch nur Videos akzeptiert die 2 Tonspuren haben. Einmal Ingame und einmal Mikro. Die Audios werden dabei auf 44100Hz gesampelt vom Skript und auf 16 Bit Stereo gechanged, damit diese gemischt werden können für Youtube.
    Da ich das ohne Indexieren machen wollte musste ich vorher ja die zweite Audiospur extrahieren. Weil kA. Gibt es in AVISynth eine Möglichkeit andere Audiospuren mit WAVSource zu laden, statt mit FFAudioSource?
    Ansonsten klappt die Batch enwandfrei ^^ Nicht grad eine Musterlösung, aber sie funktioniert ^^

  • WAVSource gibt es natürlich, ist eine Variante des VfW-Zugriffs auf RIFF-Standard-Dateien (zu denen AVI und WAV zählen). Dürfte auch mit komprimierten Tondaten im WAV-Kontainer funktionieren über ACM-Codecs, aber PCM-WAVs sind sicher am zuverlässigsten.

    Allerdings unterstützt AviSynth wohl nicht mehrere Tonspuren pro Clip-Variable. Das Multiplexen müsste dann wohl VirtualDub(Mod) oder AviMux-GUI übernehmen; letztere müsste man auch irgendwie mit Konfigurationsdateien steuern können, wenn ich mich recht erinnere.

    FFAudioSource kann dafür jeweils einzelne Audiospuren aus Media-Dateien verschiedener Formate in eigene Clip-Variablen einlesen, die dann parallel verarbeitbar wären. Nur müsste man die nach der Verarbeitung wohl "seitwärts" ausgeben lassen, weil eben nicht beide parallel im Ausgabe-Clip unterkommen.

  • Naja, die Batch sorgt ja dafür das die zweite Tonspur aus allen AVIs extrahiert wird. Beispielsweise die Mikrofonspur in Mono. Die erste Spur kann ja drin bleiben und muss nicht extrahiert werden, da AVISource das ja mit audio=true übernimmt.

    Mit dem AVISynth Skript da kann ich halt die Videos egal welche Auflösung diese haben zusammenknüpfen als ein einziges Video. Ob 4:3 oder 16:9, egal wie es aussieht.

    Der Grundgedanke war: DXTory und der Afterburner können 2 Tonspuren generieren. Wenn aber im Spiel bei der Aufnahme sich die Auflösung ändert, legen diese Programme eine neue AVI Datei an. Sind alle in einem Ordner, brauch ich nur noch alle da rein zu werfen in die Batch und die sind alle schön einheitlich Zentriert auf eine festgelegte Zielgröße. Was weiß ich 1280x720. Und da sind dann z.B. Videos mit 640x480, eins mit 2048x1152 und noch eins mit 320x160. Die würden alle auf 1280x720 angepasst werden mit korrekem Seitenverhältnis.

    Die extrahierte Tonspur wird für jedes Video per WAVSource wieder geladen und mit der ersten vermischt. Gegebenfalls kann man noch ein Lautstärkeregler einbauen den man über Batch mit Werten angeben kann.

    Hab das ganze Teil auch mal zu Ende gesponnen und hier ist das Resultat davon:
    http://www.mediafire.com/view/1ga7bbwd5…acks_Encode.bat

    Das ist richtig praktisch die Datei. Jedenfalls für einige die ich kenne. ^^ Weil ich kann nun alle AVIs aus dem Ordner reinwerfen, gebe meine Zielauflösung an etc. und die Batch arbeitet komplett vollständig bis zur finalen gedubten MKV die man dann für Youtube nur noch hochladen bräuchte ^^

    Frage ist aber immer noch ob man das \ Zeichen bei dieser im ersten Thread genannten Schleife irgendwie so ändern kann das daraus ein \\ wird?
    Oder ist es auch möglich in Batch per Schleife einen Zeilenvorschub und Wagenrücklauf irgendwie hinzubekommen?

    Weil diese zwei Fragen beschäftigen mich sehr. Weil damit würde ich einige Probleme besser lösen können ^^ Wenn es dann gehen würde.
    Ich wollte nämlich nicht so viele Batchdatein erstellen dafür um sie dann per Call oder intern auszuführen. ^^

    Ich hatte auch schon an SETLOCAL EnableDelayEdExpansion gedacht wo man dann innerhalb der Schleifen dann mit ! arbeiten kann. Aber das scheint doch noch mal etwas anders abzulaufen als die Variablen mit % anzusprechen.

    Wie gesagt, würde mich persönlich mal interessieren ob sowas überhaupt möglich ist in einer Schleife wie im ersten Thread aufgeführt Charakters zu ändern oder eine Zeilenumbruch zu gestalten ^^

Jetzt mitmachen!

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