I have 2 scripts that I use to cut 20 seconds at start and 20 seconds at the end of every video in a folder, using ffmpeg. For cutting the start of video I use: Code: for %%a in ("*.mp4") do "ffmpeg" -i %%a -ss 00:00:20.000 -c:v copy -c:a copy Trimmed\%%a And to cut the end I use 2 bat files: Trim1.bat Code: @echo off for %%i in (*.mp4) do ( call trim2.bat "%%i" ) Trim2.bat Code: @echo off for /f "tokens=*" %%a in ('ffprobe -show_format -i %1 ^| find "duration"') do set _duration=%%a set _duration=%_duration:~9% for /f "delims=. tokens=1*" %%b in ('echo %_duration%') do set /a "_durS=%%b" for /f "delims=. tokens=2*" %%c in ('echo %_duration%') do set "_durMS=%%c" rem following line is seconds to cut set /a "_durS-=20" set "_newduration=%_durS%.%_durMS%" set "_output=%~n1" md _fixed ffmpeg -ss 0 -i %1 -t %_newduration% -c copy "Trimmed%_output%.mp4" But this creates more files since it puts the trimmed files into a new folder, then trims those files into another new folder. So how do I merge these scripts so it cuts both start and end at the same time?
Try something like this: Code: @Echo Off SetLocal Set "ext=mp4" Set "opts=-v quiet" Set "opts=%opts% -print_format "compact=print_section=0:nokey=1:escape=csv"" Set "opts=%opts% -show_entries "format=duration"" If Exist *.%ext% (If Not Exist "Trimmed\" MD Trimmed) For %%a In (*.%ext%) Do Call :Sub "%%~a" Exit/B :Sub For /f "Tokens=1* Delims=." %%a In ( 'FFProbe %opts% %1') Do (Set/A "ws=%%a-20" & Set "ps=%%b") If %ws% Lss 20 GoTo :EOF Set/A hh=ws/(60*60), lo=ws%%(60*60), mm=lo/60, ss=lo%%60 If %hh% Lss 10 Set hh=0%hh% If %mm% Lss 10 Set mm=0%mm% If %ss% Lss 10 Set ss=0%ss% FFMpeg -i %1 -ss 00:00:20.000 -to %hh%:%mm%:%ss%.%ps:~,3% -c:v copy -c:a copy "Trimmed\Trimmed_%~1"