Hallo zusammen,
ich muss eine Reihe von MPEG2-Videos einer kleinen Nachbearbeitung unterziehen. Da mit allen das gleiche passieren soll, heißt dies, ein Batch mit ein paar Kommandozeilentools wie ffmpeg sollte gute Dienste tun. Die entsprechenden Batches waren für einen alten DOSler auch schnell geschrieben, aber jetzt kommt die schöne neue Windows-Welt, vielleicht hat ja einer eine Idee, wie man mit dem Problem fertig wird.
Die erste Batch nach dem Motto "bearbeite alles" war ja noch schnell geschrieben:
for %%a in (*.mpg) do vid-redo.bat %%a
Und hier mal die erste Zeile aus der vid-redo.bat, das demuxen mit ffmpeg
c:\vidtools\ffmpeg -i "%1" -vcodec copy -f mpeg2video "temp\%1.m2v" -acodec copy -f mp2 "temp\%1.mp2"
Genauso wie die letzte Zeile das Muxen
c:\normtest\ffmpeg -i "temp\%1.m2v" -i "temp\%1norm.mp2" -acodec copy -vcodec copy -f mpeg "output\%1"
Da ich das Original nicht überschreiben will, Quelle und Ziel aber den gleichen Namen haben sollen, muss ich mit Unterverzeichnissen arbeiten. Und hier fängt das Problem an.
Bei einer Datei, sei der Name noch so lang, ohne Leerzeichen, klappt alles. Da lauten die Dateinamen (bzw. die übergebenen Parameter, die Anführungszeichen gehören dazu) dann z.B.
"temp\ich_bin_ein_film.mpgnorm.mp2" oder "output\ich_bin_ein_film.mpg"
Sind Leerzeichen im Dateinamen, muss der händische Aufruf mit Anführungszeichen erfolgen, die For-Schleife macht ebenfalls automatisch Anführungszeichen. Dann heißen die Dateinamen
"temp\"ich_bin_ein_film.mpg"norm.mp2" oder "output\"ich_bin_ein_film.mpg""
Das klappt natürlich nicht.
Hat jemand eine Idee, wie man das gut automatisieren könnte?
Gruß
Volker
Windows-Shell, Scripte und Leerzeichen im Dateinamen
- Dark_Lord
- LAN Manager
- Beiträge: 249
- Registriert: So 25. Mai 2008, 19:44
- Wohnort: Nähe Köln
- Kontaktdaten:
Windows-Shell, Scripte und Leerzeichen im Dateinamen
Arbeitspferde: Xeon E5-2683v3 und Q6600
Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine
Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine
Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Re: Windows-Shell, Scripte und Leerzeichen im Dateinamen
Ich habe es automatisiert, indem ich mir für FFMPEG ein entsprechendes Tool programmiert habe. Es ist zwar ein DOS-Tool, funktioniert aber bis Windows XP und nutzt, wenn unter Windows, auch die langen Dateinamen.
Es erstellt automatisch entsprechende Batch-Files.
Das Lustige daran ist dies: Es liest alle Files der entsprechenden Erweiterung ein und erstellt eine Batch, die sie in MPG wandelt - aber es läßt dabei Files aus, die schon in MPG gewandelt sind.
Also braucht man nur das File zu starten und es erstellt ein File namens CONVERT.BAT, das alle zu konvertierenden Files aufruft.
Bisher habe ich die Parameter in der EXE selber eingebaut - aber ich werde es noch so machen, daß man ein Textfile angeben kann, in dem die Konverterzeile steht und in die dann die zwei Filenamen (für das Quell- und das Zielfile) eingetragen werden.
Also z.B. so eine Zeile
ffmpeg.exe -i "%1" -y -deinterlace -sws_flags fast_bilinear -dct fastint -idct int -f mpegvideo -vcodec mpeg1video -s 640x480 -b 256000 -r 20 -acodec mp2 -ab 64000 -ar 32000 -ac 1 "%2"
Das wäre insofern gut, daß man auch andere Konverter benutzen könnte und daß man die Parameter (natürlich) frei wählen könnte.
Bestünde Interesse?
Ich weiß: Ideal wäre natürlich ein Frontend, um die Parameter dafür in einer Art Oberfläche einzustellen... Sowas würde ich dann nur mal machen, wenn ich Lust habe oder mich jemand dafür dann ganz lieb hat.
Es erstellt automatisch entsprechende Batch-Files.
Das Lustige daran ist dies: Es liest alle Files der entsprechenden Erweiterung ein und erstellt eine Batch, die sie in MPG wandelt - aber es läßt dabei Files aus, die schon in MPG gewandelt sind.
Also braucht man nur das File zu starten und es erstellt ein File namens CONVERT.BAT, das alle zu konvertierenden Files aufruft.
Bisher habe ich die Parameter in der EXE selber eingebaut - aber ich werde es noch so machen, daß man ein Textfile angeben kann, in dem die Konverterzeile steht und in die dann die zwei Filenamen (für das Quell- und das Zielfile) eingetragen werden.
Also z.B. so eine Zeile
ffmpeg.exe -i "%1" -y -deinterlace -sws_flags fast_bilinear -dct fastint -idct int -f mpegvideo -vcodec mpeg1video -s 640x480 -b 256000 -r 20 -acodec mp2 -ab 64000 -ar 32000 -ac 1 "%2"
Das wäre insofern gut, daß man auch andere Konverter benutzen könnte und daß man die Parameter (natürlich) frei wählen könnte.
Bestünde Interesse?
Ich weiß: Ideal wäre natürlich ein Frontend, um die Parameter dafür in einer Art Oberfläche einzustellen... Sowas würde ich dann nur mal machen, wenn ich Lust habe oder mich jemand dafür dann ganz lieb hat.
Re: Windows-Shell, Scripte und Leerzeichen im Dateinamen
Ärger mit Leerzeichen im Dateinamen: Für eine Webadresse nehme ich %20 statt des Leerzeichens und für Batchdateine nehme ich statt eines Leerzeichens ein ?-Zeichen.Dark_Lord hat geschrieben:Sind Leerzeichen im Dateinamen, muss der händische Aufruf mit Anführungszeichen erfolgen
Mit cmd kann man doch bestimmt ermitteln ob und wo sich ein Leerzeichen im Dateinamen befindet. Ich war allerdings noch zu faul die Befehle von diesem Interpreter zu lernen.
Dirk
- Dark_Lord
- LAN Manager
- Beiträge: 249
- Registriert: So 25. Mai 2008, 19:44
- Wohnort: Nähe Köln
- Kontaktdaten:
Re: Windows-Shell, Scripte und Leerzeichen im Dateinamen
Vielen Dank schon mal. Sorry wenn ich mich längere Zeit nicht mehr gemeldet habe, das Projekt ist über meinen Urlaub etwas eingeschlafen.
Lösung des ganzen ist: Bei den Zwischenschritten mit temporären Dateien arbeiten.
In der ersten Batch kommen erst mal Anführungszeichen um das %%a, also:
for %%a in (*.mpg) do vid-redo.bat" %%a"
Un der zweiten dann ohne Anführungszeichen
c:\vidtools\ffmpeg -i %1 -vcodec copy -f mpeg2video "temp\temp.m2v" -acodec copy -f mp2 "temp\temp.mp2"
[...]
c:\normtest\ffmpeg -i "temp\temp.m2v" -i "temp\temp.mp2" -acodec copy -vcodec copy -f mpeg "output\temp.mpg"
cd output
ren temp.mpg %1
Bearbeitet alles wie es soll
Lösung des ganzen ist: Bei den Zwischenschritten mit temporären Dateien arbeiten.
In der ersten Batch kommen erst mal Anführungszeichen um das %%a, also:
for %%a in (*.mpg) do vid-redo.bat" %%a"
Un der zweiten dann ohne Anführungszeichen
c:\vidtools\ffmpeg -i %1 -vcodec copy -f mpeg2video "temp\temp.m2v" -acodec copy -f mp2 "temp\temp.mp2"
[...]
c:\normtest\ffmpeg -i "temp\temp.m2v" -i "temp\temp.mp2" -acodec copy -vcodec copy -f mpeg "output\temp.mpg"
cd output
ren temp.mpg %1
Bearbeitet alles wie es soll
Arbeitspferde: Xeon E5-2683v3 und Q6600
Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine
Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine
Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Re: Windows-Shell, Scripte und Leerzeichen im Dateinamen
Dazu habe ich folgende Seiten gefunden:Dark_Lord hat geschrieben:Vielen Dank schon mal. Sorry wenn ich mich längere Zeit nicht mehr gemeldet habe, das Projekt ist über meinen Urlaub etwas eingeschlafen.
Lösung des ganzen ist: Bei den Zwischenschritten mit temporären Dateien arbeiten.
In der ersten Batch kommen erst mal Anführungszeichen um das %%a, also:
for %%a in (*.mpg) do vid-redo.bat" %%a"
Un der zweiten dann ohne Anführungszeichen
c:\vidtools\ffmpeg -i %1 -vcodec copy -f mpeg2video "temp\temp.m2v" -acodec copy -f mp2 "temp\temp.mp2"
[...]
c:\normtest\ffmpeg -i "temp\temp.m2v" -i "temp\temp.mp2" -acodec copy -vcodec copy -f mpeg "output\temp.mpg"
cd output
ren temp.mpg %1
Bearbeitet alles wie es soll
http://forum.chip.de/programmieren/txt- ... page2.html
http://www.mikrocontroller.net/topic/75570
Für DOS 6.22:
http://www.i8086.de/dos-befehle/find.html
Dirk