Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Biber am 09.11.2011 um 14:22:35 Uhr
Verschoben von "Tools & Utilities" nach "Batch &Shell".
GELÖST

Werte aus einer Medien-Info-Datei auslesen in Varibale schreiben zwecks Weiterverarbeitung

Frage Entwicklung Batch & Shell

Mitglied: max5moritz

max5moritz (Level 1) - Jetzt verbinden

09.11.2011, aktualisiert 18.10.2012, 3535 Aufrufe, 6 Kommentare

Hallo miteinander,

und einen schönen Abend erst einmal.

Ich möchte mir die Transkodierung von Sat-Aufnahmen ein wenig "erleichtern".
Bis zum Kopieren, Umwandeln in ts-Dateien und Auslesen der Medien-Infos oder wie VLC sagt Codec-Details bin ich schon gekommen.
Jetzt hänge ich daran, diese Werte irgendwie in Variable zu kriegen, damit ich mittels VLC die Sache in mp3-Dateien bzw. mp4-Dateien transkodiert bekomme.
Ich habe mich schon an diesem Abschnitt dank dieses tollen Forum ( vieles bekommt man ja hier so schon mit) schon einwenig versucht.
Allein, ich glaube, ich bin da irgendwie auf dem Holzweg. Deshalb vorab "meine" Testsschleife (das Orginal stammt von Bastla oder Biber glaub ich) samt Ergebnis:

01.
@echo off & setlocal 
02.
::> test-2.txt 
03.
for %%i in (ID Format Bit Width Height Channel) do ( 
04.
    for /f "tokens=1* delims=:" %%a in ('findstr /b "%%i" "%~dp0\test.nfo"') do call :%%i "%%b" 
05.
06.
echo -------------------------------------- 
07.
ECHO aus Schleife  
08.
Echo Var1=%Var1% 
09.
echo Var2=%Var2%, Var3=%Var3%, 
10.
ECHO Var4=%Var4%,  
11.
echo Var5=%Var5%, 
12.
echo Var6=%Var6%, 
13.
echo. 
14.
pause 
15.
goto :eof 
16.
 
17.
:ID 
18.
set var1=%1 
19.
set var1=%var1:~2,-1% 
20.
echo ID=%var1% 
21.
echo ID=%var1% >> test-2.txt 
22.
goto :eof 
23.
 
24.
:Width 
25.
set var2=%1 
26.
set var2=%var2:~2,-1% 
27.
echo Width=%var2% 
28.
goto :eof 
29.
 
30.
:Height 
31.
set var3=%1 
32.
set var3=%var3:~2,-1% 
33.
echo Height=%var3% 
34.
goto :eof 
35.
 
36.
:Format 
37.
set var4=%1 
38.
set var4=%var4:~2,-1% 
39.
echo Format=%var4% 
40.
goto :eof 
41.
 
42.
:Bit 
43.
set var5=%1 
44.
set var5=%var5:~2,-1% 
45.
echo Bit=%var5% 
46.
goto :eof 
47.
 
48.
:Channel 
49.
set var6=%1 
50.
set var6=%var6:~2,-1% 
51.
echo Channel=%var6% 
52.
goto :eof 
53.
 
Das zeigt die Bildschirm-Anzeige
01.
ID=1101 (0x44D) 
02.
ID=101 (0x65) 
03.
ID=106 (0x6A) 
04.
Format=MPEG-TS 
05.
Format=MPEG Video 
06.
Format=Version 2 
07.
Format=Main@Main 
08.
Format=Yes 
09.
Format=Custom 
10.
Format=M=3, N=12 
11.
Format=AC-3 
12.
Format=Audio Coding 3 
13.
Bit=Variable 
14.
Bit=6 109 Kbps 
15.
Bit=8 bits 
16.
Bit=0.589 
17.
Bit=Constant 
18.
Bit=448 Kbps 
19.
Bit=16 bits 
20.
Width=720 pixels 
21.
Height=576 pixels 
22.
Channel=6 channels 
23.
Channel=Front: L C R, Side: L R, LFE 
24.
-------------------------------------- 
25.
aus Schleife 
26.
Var1=106 (0x6A) 
27.
Var2=720 pixels, Var3=576 pixels, 
28.
Var4=Audio Coding 3, 
29.
Var5=16 bits, 
30.
Var6=Front: L C R, Side: L R, LFE, 
31.
 
32.
Drücken Sie eine beliebige Taste . . .
Das steht am Beispiel für var1 in der Text-Datei:

01.
ID=1101 (0x44D)  
02.
ID=101 (0x65)  
03.
ID=106 (0x6A)
Und dies ist die zu verarbeitende Datei, aus der ich ein paar Werte benötige:

01.
General 
02.
ID                                       : 1101 (0x44D) 
03.
Complete name                            : Die Gänsemagd.ts 
04.
Format                                   : MPEG-TS 
05.
File size                                : 2.83 GiB 
06.
Duration                                 : 58mn 41s 
07.
Overall bit rate mode                    : Variable 
08.
Overall bit rate                         : 6 903 Kbps 
09.
 
10.
Video 
11.
ID                                       : 101 (0x65) 
12.
Menu ID                                  : 28106 (0x6DCA) 
13.
Format                                   : MPEG Video 
14.
Format version                           : Version 2 
15.
Format profile                           : Main@Main 
16.
Format settings, BVOP                    : Yes 
17.
Format settings, Matrix                  : Custom 
18.
Format settings, GOP                     : M=3, N=12 
19.
Codec ID                                 : 2 
20.
Duration                                 : 58mn 40s 
21.
Bit rate mode                            : Variable 
22.
Bit rate                                 : 6 109 Kbps 
23.
Maximum bit rate                         : 15.0 Mbps 
24.
Width                                    : 720 pixels 
25.
Height                                   : 576 pixels 
26.
Display aspect ratio                     : 16:9 
27.
Frame rate                               : 25.000 fps 
28.
Standard                                 : PAL 
29.
Color space                              : YUV 
30.
Chroma subsampling                       : 4:2:0 
31.
Bit depth                                : 8 bits 
32.
Scan type                                : Interlaced 
33.
Scan order                               : Top Field First 
34.
Compression mode                         : Lossy 
35.
Bits/(Pixel*Frame)                       : 0.589 
36.
Stream size                              : 2.50 GiB (88%) 
37.
 
38.
Audio 
39.
ID                                       : 106 (0x6A) 
40.
Menu ID                                  : 28106 (0x6DCA) 
41.
Format                                   : AC-3 
42.
Format/Info                              : Audio Coding 3 
43.
Mode extension                           : CM (complete main) 
44.
Codec ID                                 : 6 
45.
Duration                                 : 58mn 41s 
46.
Bit rate mode                            : Constant 
47.
Bit rate                                 : 448 Kbps 
48.
Channel(s)                               : 6 channels 
49.
Channel positions                        : Front: L C R, Side: L R, LFE** 
50.
Sampling rate                            : 48.0 KHz 
51.
Bit depth                                : 16 bits 
52.
Compression mode                         : Lossy 
53.
Delay relative to video                  : 3ms 
54.
Stream size                              : 188 MiB (6%) 
55.
Language                                 : German
Leider sind manche Worte doppelt belegt (z.Bsp.: Bit oder Format), bzw. sind mehrteilig, Ein paar Werte habe ich mal herausgenommen:

Format : AC-3
Format/Info : Audio Coding 3
Mode extension : CM (complete main)
Bit rate mode : Constant
Bit rate : 448 Kbps
Channel(s) : 6 channels

Die können ja als Orientierung dienen.
Für jede TS-Datei, gibt es eine solche Info-Datei. Sie liegen im selben Ordner, haben den gleichen Namen. Allein die Extension (*.ts,*.nfo) ist verschieden.
Ich benötige die Werte zum Steuern des VLC, da dieser sich ja blind / per Skript bedienen läßt.
Im Ergebnis soll dann je nach dem, welche Infos gefunden oder nicht werden (reinen AudioStreams fehlt der Videokomplex), eine MP3-Datei oder eine MP4-Datei daraus werden.

Wenn wir dafür eine Lösung finden, würde mich das sehr freuen und mit dem Rest käme ich sicherlich allein weiter.

Das Ergebnis, den kompletten Skript, würde ich dann gern als Anleitung einstellen. Vielleicht kann den ja noch jemand mal gebrauchen.

Vorerst noch einen schönen Abend, oder vieleicht doch besser: Eine gute Nacht.

Herzlichst Max5Moritz
Mitglied: 60730
09.11.2011 um 02:04 Uhr
moin oder N8...

zuerst mal - nimm das €cho off raus..
Dann hast du die Sets nicht wirklich hybsch gemacht...
set var1=%1
besser:
set "var1=%1"
Auch das:
echo ID=%var1% >> test-2.txt
echo ID=%var1%>> test-2.txt
macht sich besser.

Soviel zum Vorschlag, dann zum weiteren Ansatz:
Ich nehme mal an - ich habs nur überflogen - deine mp3 Audio Info files haben keinen Eintrag Video.
Andersherum, wirst du keine Stummfilme haben, aber wie siehts mit mehreren Tonspuren aus?

  • Ich würd das so angehen - finde "Video" und merke dir die Zeilen Nummer, finde Audio und alles zwischen Zeile Video bis Audio ist der Videoteil.
Sinngemäß also:
for /f "tokens=1,* delims=:" %a in ('findstr /n /i "Video" "%Var1%"') do echo Videoabschnitt=%a
for /f "tokens=1,* delims=:" %a in ('findstr /n /i "Audio" "%Var1%"') do echo Audioabschnitt=%a

Und das natürlich nicht echo, sondern set
Via set /a hast du dann die auszuwertenden Zeilen.

sorry, vielleicht nachher mehr, der Tag ist zu früh für heute..

Gruß

Ps: verschiebs doch in den B Bereich zu BP & Shell
Bitte warten ..
Mitglied: bastla
09.11.2011 um 08:01 Uhr
Hallo max5moritz!

Den Inhalt der Ausgangsdatei kennen wir einmal - aber was ist genau das Ziel, wie sieht die gewünschte Ergebnisdatei aus?

Grüße
bastla
Bitte warten ..
Mitglied: max5moritz
09.11.2011 um 08:59 Uhr
@TimoBeil
@ bastla

Den Inhalt der Ausgangsdatei kennen wir einmal - aber was ist genau das Ziel, wie sieht die gewünschte Ergebnisdatei aus?

Hallo, und danke Euch beiden für die schnelle Reaktion.

Ich benötige ein Teil der Werte als Variable für den VLC. Zum besseren Verständnis ein Schnipsel aus der Befehlszeile:

01.
transcode{width=720,canvas-height=576,vcodec=mp2v,vb=3072,scale=1,acodec=mpga,ab=192,channels=2,soverlay,fps=25}
Die Werte dazu finden sich in der Datei, nur wie bekomme ich sie alle in einem Rutsch in Variable geschrieben?

Grüße
Max5Moritz
Bitte warten ..
Mitglied: bastla
09.11.2011 um 11:53 Uhr
Hallo max5moritz!

Ein allgemeiner Batch, um aus zB
Channel(s)                               : 6 channels
eine Variable "%Channel[s]%" (die runden Klammern werden zur Sicherheit durch eckige sowie Leerzeichen durch "_" ersetzt) mit dem Wert "6" zu machen, könnte etwa so
01.
@echo off & setlocal 
02.
::set "Datei=%~1" 
03.
set "Datei=Test.nfo" 
04.
 
05.
for %%i in (Width,Height,Format,"Bit rate",Format,"Bit rate","Channel(s)","Frame rate") do call :ProcessLine %%i 
06.
::Nachbehandlung 
07.
::  am Dezimalpunkt trennen 
08.
for /f "delims=." %%i in ("%Frame_rate%") do set "Frame_rate=%%i" 
09.
::  Video-Bitrate ermitteln 
10.
for /f "tokens=2 delims=:" %%v in ('findstr /b /c:"Bit rate  " "%Datei%"') do if not defined VB set "VB=%%v" 
11.
set "Bit_rate=%VB: =%" 
12.
set "Bit_rate=%Bit_rate:Kbps=%" 
13.
 
14.
echo( 
15.
echo transcode{Width=%width%,canvas-height=%Height%,vcodec=%Format%,vb=%Bit_rate%,scale=1,acodec=%aFormat%,ab=%aBit_rate%,channels=%Channel[s]%,soverlay,fps=%Frame_rate%} 
16.
endlocal 
17.
goto :eof 
18.
 
19.
 
20.
:ProcessLine 
21.
set "Var=%~1" 
22.
set "Var=%Var: =_%" 
23.
set "Var=%Var:(=[%" 
24.
set "Var=%Var:)=]%" 
25.
set "Audio=" 
26.
setlocal enabledelayedexpansion 
27.
if "!%Var%!" neq "" set "Audio=true" 
28.
endlocal & set "Audio=%Audio%" 
29.
for /f "tokens=2 delims=:" %%v in ('findstr /b /c:"%~1  " "%Datei%"') do ( 
30.
    for /f %%a in ("%%v") do ( 
31.
        if not defined %Var% set "%Var%=%%a 
32.
        if defined Audio set "a%Var%=%%a" 
33.
34.
35.
::Demo 
36.
if not defined Audio ( 
37.
    call echo %Var%=%%%Var%%% 
38.
) else ( 
39.
    call echo a%Var%=%%a%Var%%% 
40.
41.
goto :eof
aussehen. Für einzelne Variablenwerte (etwa im Beispiel die "Frame_rate" mit "25.000") kann noch eine Nachbearbeitung und für andere (zB die "Bit_rate" des Videos wegen des enthaltenen Leerzeichens bei "6 109") eine noch spezifischere Ermittlung erforderlich sein ...

Das Problem "gleiche Eigenschaftsnamen für Video und Audio" (etwa "Bit_rate") habe ich so gelöst, dass beim zweiten "Auftauchen" eines solchen Namens dem Variablennamen ein "a" (sollte dann ja der Audio-Wert sein) vorangestellt wird.

Grüße
bastla
Bitte warten ..
Mitglied: max5moritz
12.11.2011 um 00:15 Uhr
Hallo bastla!

Wow, ich bin begeistert !

Danke für die Hilfe, ich bin erst heute wieder zum Forum gekommen und habe den Skript gleich gestest.

Die Echo in Zeile 37 und 39 habe ich erst einmal testweise in ein Txt-File umgeleitet. Das Ergebnis sieht gut aus - ich bin begeistert.

Eine Frage zur 14. codezeile: Was bewirkt echo( ?

Warum in 36. Zeile if not defined Audio und nicht Video? (Falls es nur ein Audio-Stream ist)

Auf jedenfall kome ich jetzt schon ein gutes Stück weiter. Ich werde über das Ergebnis berichten und darstellen.

Herzliche Grüße,
max5moritz
Bitte warten ..
Mitglied: bastla
12.11.2011, aktualisiert 18.10.2012
Hallo max5moritz!
Eine Frage zur 14. codezeile: Was bewirkt echo( ?
Im Prinzip das Gleiche wie ein herkömmliches
echo.
- allerdings lasse ich mich ja auch gerne eines Besseren belehren und glaube daher jeb-the-batcher, dass die Schreibweise mit "(" gelegentlich vorteilhafter ist ...
Warum in 36. Zeile if not defined Audio und nicht Video? (Falls es nur ein Audio-Stream ist)
Ich verwende die Variable %Audio% als Schalter, der immer dann gesetzt ist, wenn eine Eigenschaft (wie "Bit rate") zum zweiten Mal vorkommt (das erste Vorkommen wird, dem Aufbau der Info-Datei entsprechend, als "Video"-Wert interpretiert und nicht weiter gekennzeichnet). Damit nun in der Demo-Ausgabe die Variable mit dem vorangestellten "a" verwendet wird, muss vorweg festgestellt werden, ob bei diesem Schleifendurchlauf die "Audio"-Variante dran ist ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

VB for Applications
gelöst PDF Datei auslesen und per VBA in Excel schreiben (3)

Frage von Julian8990 zum Thema VB for Applications ...

Batch & Shell
gelöst PowerShell, Log Datei auslesen, bei Änderungen E-Mail senden (12)

Frage von swissbull zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable aus ini Datei auslesen und weiterverwenden (17)

Frage von n0cturne zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...