Permalänk
Medlem

Loop i batch med unikt namn

Var lääänge sen jag jobbade med batch och nu har man fastnat lite

Jag försöker göra så den tar en skärmbild av videoklipp och först tänkte börja med något enkelt som bara ta i en viss katalog.

Har detta skript

FOR %%A IN (c:\video\*.avi) DO (
ffmpeg -i c:\video\%%~nA.avi -vf fps=1/1200 c:\temp\%%~nA_img%03d.jpg
)

Rätt så enkelt förutom jag har inte riktigt löst hur man får unikt nummer på bilderna så det blir typ
videotitel_1.jpg
videotitel_2.jpg
videotitel_3.jpg
...

Nu blir det bara en bild

Permalänk
Medlem

Släng in en räknare så löser det sig.

set counter=0 for %%A in ("c:\video\*.avi") do ( set /a counter=%counter% + 1 ffmpeg -i "%%A" -vf fps=1/1200 "c:\temp\%%~nA_img%03d_%counter%.jpg" )

EDIT: Jag missförstod problemet. Du vill ju ha ut flera bilder ur samma video. Återkommer om jag hittar lösningen på det problemet istället.

EDIT 2: Hittat lösningen. Du behöver escapa % vid %03d i utfilen för att cmd inte ska läsa %0 och ersätta med arg0 (kommandot skriptet kördes med).

for %%A in ("c:\video\*.avi") do ( ffmpeg -i "%%A" -vf fps=1/1200 "c:\temp\%%~nA_img%%03d.jpg" )

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem

Ahhh ja det är ju så klart, glömde ju ett procenttecken, det borde jag ju ha sett när jag kör med det i for loopen och namnet.

Försökte även lägga in så den körde 640 i bredd så bilderna blir samma storlek överallt och hittade denna
https://stackoverflow.com/questions/14551102/with-ffmpeg-crea...

Så jag gjorde så här
ffmpeg -i "%%A" -vf fps=1/1200 -filter:v scale="640:-1" "c:\temp\%%~nA_%%03d.jpg"

Men då gör den en väldigt massa bilder och kör jag så här
ffmpeg -i "%%A" -filter:v scale="640:-1" -vf fps=1/1200 "c:\temp\%%~nA_%%03d.jpg"
Så ändras inte bildstorleken.

Men men, det är sent och kommit en bra, bit, tack så hemskt mycket

Permalänk
Medlem
Skrivet av TheCazz:

Ahhh ja det är ju så klart, glömde ju ett procenttecken, det borde jag ju ha sett när jag kör med det i for loopen och namnet.

Försökte även lägga in så den körde 640 i bredd så bilderna blir samma storlek överallt och hittade denna
https://stackoverflow.com/questions/14551102/with-ffmpeg-crea...

Så jag gjorde så här
ffmpeg -i "%%A" -vf fps=1/1200 -filter:v scale="640:-1" "c:\temp\%%~nA_%%03d.jpg"

Men då gör den en väldigt massa bilder och kör jag så här
ffmpeg -i "%%A" -filter:v scale="640:-1" -vf fps=1/1200 "c:\temp\%%~nA_%%03d.jpg"
Så ändras inte bildstorleken.

Men men, det är sent och kommit en bra, bit, tack så hemskt mycket

-vf är ett alias för -filter:v och när du specificerar det flera gånger tas bara den sista definitionen med. För att applicera flera filter separerar du dem istället med kommatecken.

for %%A in ("c:\video\*.avi") do ( ffmpeg -i "%%A" -vf "fps=1/1200, scale=640:-1" "c:\temp\%%~nA_%%03d.jpg" )

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem

Ahhh ok tackar