petergyger
Goto Top

MediaInfo: Parameter in Batch übergeben

Hallo

Die Batchdatei sieht so aus

@echo off
REM Verzeichnisbaum über 2 Ebenen tief auslesen.
REM Der Name der Verzeichnisse auf der 2. Ebene sind Staffel 1 Staffel 2 bis maximal Staffel 12
REM Auf der 2. Ebene die vorhandenen Dateien vom Typ MKV und AVI mit dem dem Tool MediaInfo auswerten

for /r %%a in (*.avi) do (
rem Name der Dateien mit der Suffix .MKV / .AVI anzeigen
echo "%%a"
\mediainfo --Inform="Video;Auflösung=%Width%x%Height%\nCodec=%CodecID%\nTonformat=%Format%\nKommerzname=%Commercial Name%" --LogFile=batch.log "%%a"
pause
)


Das Tool liefert jedoch keine Info zu der Mediendatei, welche über den Parameter %%a angegeben wurde.
Wie man auf dem Screenshot sieht, funktioniert es über die CLI. Mit und ohne Pfadangabe. Nur im Batch werden keine Infos geliefert. Die Datei "Batch.log" enthält auch keine Daten. Dasselbe wie auf dem Screenshot. Den Parameter "--LogFile=batch.log" habe ist testhalber wegfallen lassen. Noch immer keine Daten über die AVI Datei angezeigt.

formt1


Wo ist der Fehler?

Grüsse
Peter

Content-Key: 481850

Url: https://administrator.de/contentid/481850

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: aqui
aqui 04.08.2019 um 15:06:25 Uhr
Goto Top
Wie immer: Welches Betriebssystem und welche Shell ??
Mitglied: PeterGyger
PeterGyger 04.08.2019 um 15:50:46 Uhr
Goto Top
Hallo aqui

Windows 10 und CMD.EXE

Ähhh...
Ist Batch nicht eindeutig Windows zu geordnet?
In der Linux Welt nennt man das doch Skript?
Und Cisco kennt das gar nicht - oder?

Und die Befehle wie REM, FOR und ECHO sind doch auch sprechend? face-smile

Grüsse und einen schönen Sonntag wünsche ich
Peter
Mitglied: rubberman
rubberman 05.08.2019 um 13:55:01 Uhr
Goto Top
Mach mal "%%a" zu "%%~a" um zu vermeiden dass der Pfad doppelt in Anführungszeichen steht.
Weiterhin weiß ich nicht was mit Umlauten wie das ö in Auflösung passiert. Speichere das script mal in der OEM Codpage (vermutlich 850) ab, oder versuchsweise in UTF-8 ohne BOM.

Steffen
Mitglied: PeterGyger
PeterGyger 05.08.2019 um 14:14:02 Uhr
Goto Top
Hallo Rubberman

A: Variable auf "%%~a" ändern hat keine Veränderung der Ausgebe zur Folge gehabt

Die Variable auf
for /r %%a in (*.avi) do (
rem Name der Dateien mit der Suffix .MKV / .AVI anzeigen
echo "%%a"
\mediainfo --Inform="Video;Auflösung=%Width%x%Height%\nCodec=%CodecID%\nTonformat=%Format%\nKommerzname=%Commercial Name%" --LogFile=batch.log "%%~a"
pause
)

B:
Wie man auf dem Screenshot sehen kann, hat der Dateiname keine Umlaute:
"D:\Addams Family\Staffel 1\S01 (1).avi"

Der Befehl "CHCP" bestätigt mir, dass die Codepage 850 (default) aktiv ist.
B.t.w. das das für die Stringbverabeitung in einer Batchdatei relevant ist, halte ich nicht für glaubhaft. CLI ist CLI - ob direkt eingegeben oder per Batch spielt keine Rolle. Es ist die 8 Bit ASCII Tabelle

Grüsse
Peter
Mitglied: rubberman
rubberman 06.08.2019 um 17:44:45 Uhr
Goto Top
B:
Wie man auf dem Screenshot sehen kann, hat der Dateiname keine Umlaute:
"D:\Addams Family\Staffel 1\S01 (1).avi"
Nein, aber deine Kommandozeile. Entspricht die Zeichenkodierung der Scriptdatei nicht der OEM Codepage der Konsole, geht's in die Hose.

Steffen
Mitglied: PeterGyger
PeterGyger 06.08.2019 aktualisiert um 18:39:02 Uhr
Goto Top
Hallo rubberman

A: Codepages varieren die 2. 7 Bit ASCII COdes. Also von 128 - 256.
Wenn ich unterschiedliche Codepages (Windows Editor versus CMD) verwende, ist der Code nur in diesem Fall eine potentielle Fehlerquelle
Der Dateiname inklusive Pfad enthält jedoch keine Bytes der 2. 128 ASCII Codes.

B:
ich habe zum testen den Dateinamen vereinfacht auf "S01E01.avi". Dasselbe Ergebnis

C:
Ich habe mit "Copy con" und CTRL-Z die Datei direkt in der Shell (cmd) neu erstellt. Nur die For Schlaufe. Dasselbe

Last but not lest - warum nicht selber testen?
Der Batch ist hier, dass Tool ist kostenlos.

Schönen Abend wünsche ich
Peter
Mitglied: rubberman
rubberman 08.08.2019 um 17:35:42 Uhr
Goto Top
A: Die Zeichencodierung ist die Fehlerquelle in jedem Batchscript. Ausschließen kannst du das das nur wenn dein Code ausschließlich ASCII enthält. Bei Umlauten ist Schluss mit lustig. Da dein Code das Wort "Auflösung" mit einem "ö" enthält, muss dein Code zwangsläufig in der Codepage vorliegen, die der Commandozeileninterpreter erwartet. Das geht entweder indem du das Script in der entsprechenden OEM Codepage speicherst, oder den Interpreter mittels CHCP mit der Codepage konfigurierst in der das Script gespeichert wurde.

B: Der Dateiname hat damit überhaupt nichts zu tun. Mit den Variablen einer einfachen FOR oder einer FOR /R Schleife kannst du sogar Chinesische Dateinamen weiterleiten. Die CMD arbeitet intern mit den UTF-16 API Funktionen. Nur ausgeben wird nichts, da das Konsolefenster nur maximal UCS-2-fähig ist. Aus einem Script heraus ist aber nicht mal das möglich.

C: Dann musst du dir die Kommandozeilensyntax des Tools noch mal genau ansehen, wenn dort das Problem liegt.

Last but not lest - warum nicht selber testen?
Nimm's mir nicht übel - weder kann ich mit diesem Tool irgend etwas anfangen, noch hätte ich eine Videodatei mit der ich testen kann. Wenn überhaupt, dann streame ich Videos statt mir die Festplatte zu vermüllen.

Steffen
Mitglied: PeterGyger
PeterGyger 08.08.2019 um 18:06:00 Uhr
Goto Top
Guten Abend

Das Wort "Auflösung" ist kein Parameter. Es ist ein Label, ein Titel.
Das ermöglicht die Ausgabe mit Namen zu machen.
D.h. "Auflösung" wird weder vom OS noch vom Tool Mediainfo geparst, sondern ist simpler Text
Ich kann statttdessen auch *** schreiben oder gar keine Titel angeben.

Gerne kann ich das Szenario auch noch testen, da Du weder Tool noch eine Mediadatei besitzt.

In jedem Fall interpretiert das Tool den Label nicht und es ist absolut mit 100% Gewissheit ausgeschlossen, dass hier eine Ursache liegt. Last but not least: direkt auf der CLI geht es.
D.h. Du konstruierst einen Codepage Zusammenhang, welcher nur in einem Batch, einem simplen Interpreter zum Zuge komm.

Du hast überzeugend zum Thema doziert, jedoch kein Jota zu einer nachvollziebaren Erklärung bzw. Lösung beigetragen.
Ich werde mir daher nicht mehr die Zeit für eine Antwort nehmen, da ich den Nutzen nicht sehe. Das ist eine rein sachliche Entscheidung, da wir mehr oder weniger alle haushälterisch mit unserer Zeit umgehen müssen / wollen...

Grüsse
Peter
Mitglied: rubberman
rubberman 08.08.2019 um 20:47:09 Uhr
Goto Top
Kann doch alles niemand wissen wenn du die Informationen nicht gibst. Eine Kommandozeilenreferenz hast du auch nicht verlinkt, also bin ich auf die Suche gegangen.
https://fossies.org/linux/MediaInfo_CLI/MediaInfo/Contrib/CLI_Help.doc
Batch Processing Example

If a file C:\video\USA Holiday.mpg contains AC-3 audio, then this may be determined and used in the following C:\conversion.bat called using:
 
C:\conversion.bat C:\video\USA Holiday.mpg 

---conversion.bat--------------------------------------------------
@echo off
: Get the codec
C:\Programs\mediainfo_cli\mediainfo.exe --Inform=Audio;%%Codec%% %1 > C:\value.txt
: Read it
for /f "tokens=*" %%A in ('type C:\miresult.txt') do set myVar=%%A  
: Test for AC-3
if ".%myvar%" == ".AC-3" goto :AC3  
: non-AC-3 processing follows
ffmpeg.....
goto :exit
:AC3
: AC-3 processing follows
ffmpeg....
:exit
---------------------------------------------------------------------
Entspricht nicht 1:1 deinem Code, ich weiß. Aber was klar wird ist, dass die Prozentzeichen als Literale erwartet werden. Das bedeutet dass sie in einem Batchscript verdoppelt werden müssen, wie im Beispiel gezeigt. Anderenfalls versucht der Kommandozeileninterpreter bereits beim Parsen des Codes so etwas wie %Width% zu einem Wert aufzulösen.

Steffen