Пакетный скрипт FFMPEG для Windows для удаления первых 13 секунд и последних 6 секунд

Итак, я работал над этим последние 2 дня, просматривая здесь статьи, и многие из них только на полпути к моему ответу. У меня есть около 200 видео, которые нужно конвертировать в пакетном режиме. У меня есть только окна на моем прочтении. Я успешно удалил первые 13 секунд без проблем. А вот последние 6 нужно удалить из каждого файла. Моя последняя итерация:

for %%a in ("*.mp4") do set /a dur=(ffprobe -i "%%a" -show_entries format=duration -v quiet -of csv="p=0") set /a trim=(dur-6 -sexagesimal) ffmpeg -t trim -i "%%a" "output\%%~na.mp4"

Однако, когда я запускаю это, я получаю несбалансированную скобку. ошибка. Полное чтение ниже:

C:\Users\Me\Desktop\FFMPEG Test Folder>set /a dur=(ffprobe -i "test.mp4" -show_entries format=duration -v quiet -of csv="p=0") set /a trim=(dur-6 -sexagesimal) ffmpeg -t trim -i "test.mp4" "output\test.mp4"
Unbalanced parenthesis.

person Keinushi    schedule 02.08.2020    source источник


Ответы (1)


Вот что в итоге заработало

@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 (
    'C:\ffmpeg\bin\FFProbe %opts% %1') Do (Set/A "ws=%%a-6.00" & Set "ps=%%b")
rem 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%
C:\ffmpeg\bin\FFMpeg -i %1 -ss 00:00:13.0000 -to %hh%:%mm%:%ss%.%ps:~,3% -filter:v "crop=950:720:170:0" -r 24 -c:a copy "Trimmed\%~1"
person Keinushi    schedule 04.08.2020