Batch Mehrere Dateien mit FFMPEG verarbeiten

Cassius1985

Captain
Registriert
Sep. 2004
Beiträge
3.583
Ich hab mal wieder ein kleines Problem :)

Hier erstmal das Script:

Code:
@echo off & setlocal

For /f "tokens=1,2 delims=" %%f in ("%1") do (
set "LAUFWERK=%%~df"
set "PFAD=%%~pf"
set "DATEI=%%~nf"
)
echo %LAUFWERK%
echo %PFAD%
echo %DATEI%

ffmpeg -y -i %LAUFWERK%%PFAD%%DATEI%ns.MP4 -i song.mp3 -codec copy -shortest %LAUFWERK%%PFAD%%DATEI%.mp4

Ich möchte, Simpel gesagt, einfach mehrere Dateien in die Batch ziehen, diese soll dann eine *.mp4 nach der anderen ablaufen, so viele, wie per Drag&Drop

Aktuell nimmt er nur die erste Markierte Datei.
Die Dateien liegen alle in unterschiedlichen Ordnern auf unterschiedlichen Laufwerken, daher die "Aufdröselung" :)

Was hab ich übersehen, dass er, egal wie viele Dateien ich auf das BATCH ziehe, er nur die erste verarbeitet?
 
Code:
for %%a in ("Videos\Convert\*.*") do ffmpeg -i "%%a" -map_metadata -1 -c:v libx265 -crf 28 -c:a aac -b:a 30k -movflags +faststart -tag:v hvc1 "Videos\Converted\%%~na.mp4"
pause

so z.B.

Convert = Input
Converted=Output

Du schiebst alle Dateien in den Convert Ordner und startest deine .bat

Dann kannst du spazieren gehen
 
  • Gefällt mir
Reaktionen: madmax2010
Code:
for %%f in (%*) do (
    echo "file %%f"
)
 
  • Gefällt mir
Reaktionen: ryan_blackdrago
@Cassius1985 Und falls Du Dein eigenes Skript an's Laufen bekommen möchtest, setz die Schleife halt so, dass sie nicht vor der Ausführung von ffmpeg beendet ist, sondern pack alles in die Schleife (ergo die schliessende Klammer aus Zeile 7 nach Zeile 13).
 
  • Gefällt mir
Reaktionen: kartoffelpü
Nur als Erklärung, weshalb das Skript beim Ziehen mehrerer Dateien nicht so läuft:

%1 ist der erste Wert der Parameterübergabe. Ziehst Du mehrere Dateien auf die Batch, so läuft diese im Augenblick nur mit der ersten Datei, die übergeben wird.

Für die zweite müsste %2, für die dritte Datei %3, usw. eingebaut sein. Was hier fehlt.

Gute und elegante Lösung von Yuuri via for-Schleife die Dateien für die Parameterübergabe weiterzugeben.

So müsste es gehen:
Code:
@echo off & setlocal
for %%f in (%*) do (
ffmpeg -y -i %%~df%%~pf%%~nfns.MP4 -i song.mp3 -codec copy -shortest %%~df%%~pf%%~nf.mp4
)
 
Phrasendreher schrieb:
@Cassius1985 Und falls Du Dein eigenes Skript an's Laufen bekommen möchtest, setz die Schleife halt so, dass sie nicht vor der Ausführung von ffmpeg beendet ist, sondern pack alles in die Schleife (ergo die schliessende Klammer aus Zeile 7 nach Zeile 13).

Danke auch @ryan_blackdrago :)

Oh mann, manchmal sollte man die Augen beim Programmieren aufmachen :D
Teste ich heute Nachmittag direkt aus, ich denke dass es das schon war, in Kombination mit der Pfadangabe
Code:
"(%*)"

@NameHere, die Dateien müssen in den ursprünglichen Verzeichnissen liegen, da sie von dort aus weiter verarbeitet werden.


Ich werde berichten.

Edit 13:26Uhr:

Habs:

Code:
@echo off & setlocal

set "LAUFWERK=%%~df"
set "PFAD=%%~pf"
set "DATEI=%%~nf"

for %%f in (%*) do (

echo %LAUFWERK%
echo %PFAD%
echo %DATEI%

rem ffmpeg -y -i %LAUFWERK%%PFAD%%DATEI%.MP4 -c copy -an %LAUFWERK%%PFAD%%DATEI%ns.mp4 
)

Danke nochmal für alle Denkanstöße !
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Phrasendreher
Zurück
Oben