WinFuture-Forum.de: Dateiendung in Batch-Datei extrahieren... - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Dateiendung in Batch-Datei extrahieren...


#1 Mitglied ist offline   Lapje 

  • Gruppe: aktive Mitglieder
  • Beiträge: 291
  • Beigetreten: 12. Januar 05
  • Reputation: 0

geschrieben 26. Juni 2011 - 02:34

Hallo zu später Stunde...

Ich werde demnächst einige meiner TV-Aufnahmen umwandeln, und damit ich nicht alles von Hand machen muss, wollte ich mir eine kleine Batch-Datei basteln. Das ist nach 4 Stunden dabei rausgekommen:

for %%I in (*.mpg) do (
"DGindex.exe" -AIF=[%%I] -IA=4 -YR=1 -OM=1 -TN=80 -OFD=[%%I] -EXIT
)

for %%I in (*.ac3) do (
"eac3to.exe" "%%I" 1: "%%I.wav" -down2 -simple
)

for %%I in (*.wav) do (
"lame.exe" "%%I" "%%I.mp3" -h -b 192
)

del *.ac3
del *.txt
del *.d2v
del *.wav


Manch einer mag jetzt die Hände über den Kopf zusammen schlagen, aber wie gesagt, ich habe vor 4 Stunden mit dem Thema überhaupt erst angefangen...:unsure:

Was soll das Script tun?
In der ersten Schleife werden per DGIndex die mpg-Dateien in einen m2v- und ac3-Stream geteilt. Danach wird per eac3to das AC3-File in ein Wav-File gewandelt (ich weiß, das könnte ich direkt in DGIndex machen, aber beim decodieren in Wav werden keine Delay-Infos in den Dateinamen geschrieben, und die brauche ich später beim umwandeln). Zu guter letzt wird das Wav-File in ein MP3-File umgewandelt. Vor der Umwandlung soll noch ein kommandozeilenbasierter Normalizer kommen, aber den habe ich noch nicht gefunden.

Zu guter letzt sollen alle überflüssigen Dateien gelöscht werden.

Das klappt im großen und ganzen schon recht gut. Ich habe nur ein Problem: In jeder for-Schleife wird nach einer bestimmten Dateiendung gesucht und der Dateinahme zur weiteren Verwendung in eine Variable gespeichert. Das Problem ist nun dass der Dateiname (incl. Endung) jetzt auch zum abspeichern benutzt wird. So wird nach jeder weiteren Verarbeitung aus

datei.mpg
datei.mpg.ac3
datei.mpg.ac3.wav
und schließlich
datei.mpg.ac3.wav.mp3

Das ist natürlich nicht Sinn der Sache.

Gibt es eine Möglichkeit, die Endung vom Dateinahmen zu entfernen, und nur mit "Datei" weiter zu arbeiten? denn dann würde ich

datei.mpg -->
datei.ac3 -->
datei.wav -->
datei.mp3

rausbekommen.

Und eine weitere Frage wäre da noch:

Bis jetzt wird ja im Grunde alles noch nach Datentyp bearbeitet, also zuerst wird alles demuxed, dann alle ac3-Files in wav, wav normalisieren, und dann alle Wav-Files in mp3. Wäre es evt. möglich das nach File zu bearbeiten? Also dass zuerst ein mpg-File demuxed wird, dann das daraus resultierende ac3-File in Wav gewandelt, dass dann normalisiert und anschließend in mp3 umgewandelt wird und dann erst das nächste mpg-File drann kommt? Ich hätte da nämlich noch eine Idee und dafür wäre diese rangehensweise vielleicht besser. Hierfür müsste jeder Dateiname aber in eine eigene Variable gespeichert werden...

Wäre klasse wenn mir da jemand helfen könnte...

Besten dank

Lapje

Dieser Beitrag wurde von Lapje bearbeitet: 26. Juni 2011 - 02:57

0

Anzeige



#2 Mitglied ist offline   XiLeeN2004 

  • Gruppe: aktive Mitglieder
  • Beiträge: 577
  • Beigetreten: 16. Juni 04
  • Reputation: 50
  • Geschlecht:Männlich
  • Wohnort:Ahrensburg
  • Interessen:Aikidō (Godan), Schwimmen, Motorradfahren ('35er Indian Four, noch von meinem Vater), Dampfmodellbau, Kino

geschrieben 26. Juni 2011 - 04:33

Du kannst Teile aus dem String in einer Variablen entfernen. Probiere mein Beispiel aus, dann ist schon klar, wie es funktioniert...

set Variable=datei.mpg.ac3.wav.mp3

echo %Variable%

set Variable=%Variable:.mpg=%
set Variable=%Variable:.ac3=%
set Variable=%Variable:.wav=%

echo %Variable%

Ich entferne .mpg .ac3 .wav in drei Zyklen, damit es auch funktioniert, wenn die Endungen in anderer Reihenfolge stehen. In deinem Fall müsste es aber in einem Rutsch mit .mpg.ac3.wav gehen, wird ja immer nach gleicher Methode verarbeitet.

Deine letzte Frage verstehe ich nicht so recht... Die Reihenfolge der Abarbeitung legst du doch durch deine Schleifen fest?!
Eingefügtes Bild
0

#3 Mitglied ist offline   Lapje 

  • Gruppe: aktive Mitglieder
  • Beiträge: 291
  • Beigetreten: 12. Januar 05
  • Reputation: 0

geschrieben 26. Juni 2011 - 09:24

Besten dank, werde ich mal ausprobieren...

Zum letzten Abschnitt:

Es werden zuerst alle Files in den jeweiligen Abschnitten bearbeitet, d.h. zuerst werden alle Files demuxed, in Wav gewandelt und in mp3 kodiert. So bruacht man dafür ja eine Menge Speicherplatz. Nehmen wir an, man hat 4GB an mpg's, dann entstehen durch das demuxen wieder 4 GB, ich brauche also 8GB auf der Platte. Wenn ich mich aber erst um jedes File kümmere (also File A demuxen, in Wav wandeln, mp3 kodieren, danach File B...) brauche ich natürlich weitaus weniger Speicherplatz, weil ich z.B. die Files direkt nach dem durchlauf löschen kann (also anstatt die 8GB habe ich evt nur 500MB durch das mpg mehr)...daher würde ich gerne bei der Bearbeitung ein File nach dem anderen komplett bearbeiten...

Nehmen wir an, ich hätte 10 mpg-Files, dann würde das so auschauen:

Wie es jetzt ist:
File 1 - 10 --> demuxen
File 1 - 10 --> ac3 in Wav wandeln
File 1 - 10 --> Wav in mp3
File 1 - 10 --> überflüssige Files löschen

Wie ich es gerne hätte:
File 1: demuxen, ac3 in Wav, mp3, löschen
File 2: demuxen, ac3 in Wav, mp3, löschen
File 3: demuxen, ac3 in Wav, mp3, löschen
usw...


Ist das verständlicher?

Noch eine Frage: Besteht die Möglichkeit nur den Dateinamen ohne Endung in eine Variable zu speichern? also statt "datei.mpg" nur "datei"?

Gruß

Lapje

Dieser Beitrag wurde von Lapje bearbeitet: 26. Juni 2011 - 11:07

0

#4 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 26. Juni 2011 - 11:39

So?

CODE
@echo off
for /f %%i in ('dir /B *.mpg') do (
set Datei=%%~ni
"DGindex.exe" -AIF=[%Datei%] -IA=4 -YR=1 -OM=1 -TN=80 -OFD=[%Datei%] -EXIT
"eac3to.exe" "%Datei%" 1: "%Datei%.wav" -down2 -simple
"lame.exe" "%Datei%" "%Datei%.mp3" -h -b 192
)
echo Ende&pause

0

#5 Mitglied ist offline   Lapje 

  • Gruppe: aktive Mitglieder
  • Beiträge: 291
  • Beigetreten: 12. Januar 05
  • Reputation: 0

geschrieben 26. Juni 2011 - 12:11

Wenn ich das so mache:

@echo off
for /f %%i in ('dir /B *.vob') do (
set Datei=%%~ni
"C:\Programme\DGIndex 1.5.5\DGindex.exe" -AIF=[%%i] -IA=4 -YR=1 -OM=1 -TN=80 -OFD=[%Datei%] -EXIT
"C:\Programme\EAC3To\eac3to 3.24\eac3to.exe" "*%%i" 1: "%Datei%.wav" -down2 -simple
"C:\Programme\lame3.97\lame.exe" "%Datei%.wav" "%Datei%.mp3" -h -b 192
)
echo Ende&pause


Dann klappt das zur Hälfte. Das Problem ist dass DGIndex noch zusätzliche Informationen in das ac3-File schreibt und der Filename sich dadurch ändert:

VTS_02_CHAPTER_02_1.mpg
VTS_02_CHAPTER_02_1.demuxed.m2v
VTS_02_CHAPTER_02_1 T80 2_0ch 256Kbps DELAY -192ms.ac3

Das PRoblem ist nur, dass

"C:\Programme\EAC3To\eac3to 3.24\eac3to.exe" "*.ac3" 1: "%Datei%.wav" -down2 -simple


nicht funktioniert. ERs ist in dem Moment ja nur ein ac3-File vorhanden, kann ich das irgendiwe machen dass er sich einfach das nimmt?

Besten dank schon mal bis hier hin, hab schon wieder ne Menge gelernt...

Lapje
0

#6 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 26. Juni 2011 - 12:33

Du musst ja auch statt %%i - %Datei% nutzen.

Hab das ja nicht umsonst in die Variable geschrieben.

Denn %%~ni ist der Dateiname ohne Dateiendung.
0

#7 Mitglied ist offline   Lapje 

  • Gruppe: aktive Mitglieder
  • Beiträge: 291
  • Beigetreten: 12. Januar 05
  • Reputation: 0

geschrieben 26. Juni 2011 - 12:49

Beim ersten mal hat es nicht funktioniert, da wurde das File nicht in DGIndex geladen, habe den Fehler aber gefunden:

@echo off
for /f %%i in ('dir /B *.vob') do (
set Datei=%%~ni
"C:\Programme\DGIndex 1.5.5\DGindex.exe" -AIF=[%Datei%.vob] -IA=4 -YR=1 -OM=1 -TN=80 -OFD=[%Datei%] -EXIT
"C:\Programme\EAC3To\eac3to 3.24\eac3to.exe" "%Datei%.ac3" 1: "%Datei%.wav" -down2 -simple
"C:\Programme\lame3.97\lame.exe" "%Datei%.wav" "%Datei%.mp3" -h -b 192
)
echo Ende&pause


Das Problem ist jetzt aber nach wie vor, dass das Script versucht die VTS_02_CHAPTER_02_1.ac3 zu laden (weil das ja der extrahierte Filename ist). DGIndex speichert aber das File als VTS_02_CHAPTER_02_1 T80 2_0ch 256Kbps DELAY -192ms.ac3 ab, so wird das File nicht gefunden...

Ist so etwas per Script überhaupt machbar?

Dieser Beitrag wurde von Lapje bearbeitet: 26. Juni 2011 - 12:50

0

#8 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 26. Juni 2011 - 12:57

Wird immer T80 2_0ch 256Kbps DELAY -192ms angehängt? Oder ändert sich das
0

#9 Mitglied ist offline   Lapje 

  • Gruppe: aktive Mitglieder
  • Beiträge: 291
  • Beigetreten: 12. Januar 05
  • Reputation: 0

geschrieben 26. Juni 2011 - 13:16

Das ändert sich sich je nach Bitrate und Delay...

Eine andere Idee wäre evt alles so abarbeiten zu lassen, und erst am ende den Dateinamen der m2v auf den des mp3-Files zu legen...

also:

Datei.m2v
T80 2_0ch 256Kbps DELAY -192ms.mp3

und am ende
Datei.m2v
Datei.mp3

wäre das möglich? Das würde schon reichen...

Dieser Beitrag wurde von Lapje bearbeitet: 26. Juni 2011 - 13:20

0

#10 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 26. Juni 2011 - 13:31

So?

CODE
@echo off
for /f %%i in ('dir /b *.vob') do (
set Datei=%%~ni
"C:\Programme\DGIndex 1.5.5\DGindex.exe" -AIF=[%Datei%.vob] -IA=4 -YR=1 -OM=1 -TN=80 -OFD=[%Datei%] -EXIT
for /f "tokens=*" %%i in ('dir /b^|find "%Datei%"^|find "DELAY"') do set Datei=%%~ni
"C:\Programme\EAC3To\eac3to 3.24\eac3to.exe" "%Datei%.ac3" 1: "%Datei%.wav" -down2 -simple
"C:\Programme\lame3.97\lame.exe" "%Datei%.wav" "%Datei%.mp3" -h -b 192
)
echo Ende&pause

Dieser Beitrag wurde von d4rkn3ss4ev3r bearbeitet: 26. Juni 2011 - 13:32

0

#11 Mitglied ist offline   Lapje 

  • Gruppe: aktive Mitglieder
  • Beiträge: 291
  • Beigetreten: 12. Januar 05
  • Reputation: 0

geschrieben 26. Juni 2011 - 13:35

leider nein, er findet die ac3-Datei nicht...

Ich weiß jetzt nur nicht ob Du die Datei nicht zu früh verkürzt hast...das so der gesuchte und reale Dateinamen nicht identisch sind...

wäre denn mein Vorschlag umsetzbar?

Dieser Beitrag wurde von Lapje bearbeitet: 26. Juni 2011 - 13:38

0

#12 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 26. Juni 2011 - 13:43

Dann müsstest du mal sagen welches Programm welche Dateiname.Endung benötigt und was danach rauskommt.
0

#13 Mitglied ist offline   Lapje 

  • Gruppe: aktive Mitglieder
  • Beiträge: 291
  • Beigetreten: 12. Januar 05
  • Reputation: 0

geschrieben 26. Juni 2011 - 14:20

OK....

also: Zuerst werden die mpg-Dateien per DGIndex in Videostream (*.m2v) und den Audiostream (*.ac3) getrennt. Das m2v-File bleibt so.

Danach wird das ac3-File via eac3to in ein Wav-File umgewandelt.

Als nächstes wird das Wav-file in ein mp3-File umgewandelt.

Jetzt müsste ich eigentlich nur den Dateinamen der *.m2v-Datei auf die mp3-Datei übertragen werden.

Also wie oben:

Zurst:
Sendung_01.m2v
T80 2_0ch 256Kbps DELAY -192ms.mp3

und am ende
Sendung_01.m2v
Sendung_01.mp3

Ich möchte deswegen den Namen angleichen, damit StaxRip die Audio-Datei automatisch zur Videodatei auswählt - so könnte ich dort auch wieder mehrere Files per Batch umrechnen lassen...

Verständlich erklärt?

Besten dank noch mal für die Mühe...

Dieser Beitrag wurde von Lapje bearbeitet: 26. Juni 2011 - 14:21

0

#14 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 26. Juni 2011 - 14:25

Wollte genau wissen wie der Dateiname dann immer lautet.

Da er ja einmal von VTS_02_CHAPTER_02_1.ac3 zu VTS_02_CHAPTER_02_1 T80 2_0ch 256Kbps DELAY -192ms.ac3 wird.

Brauch halt einmal nen Beispiel
0

#15 Mitglied ist offline   Lapje 

  • Gruppe: aktive Mitglieder
  • Beiträge: 291
  • Beigetreten: 12. Januar 05
  • Reputation: 0

geschrieben 26. Juni 2011 - 15:04

wie gesagt, der ändert sich immer. Zum einen hängt dieser davon ab wie der Originalname war, dann noch davon wie hoch die Bitrate des Streams ist und am ende noch wie hoch das Delay ist. Das sind 3 Werte die von File zu File unterschiedlich sind.

Ich weiß dass das ganze bei PHP recht einfach wäre (ich denke mal explode(), implode() )...aber wie ich das hier machen soll mit dem Dateinamentausch weiß ich nicht...
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0