Пакетный сценарий FFMPEG для windows для удаления первых 13 секунд и последних 6 секунд - PullRequest
1 голос
/ 02 августа 2020

Итак, я работал над этим последние 2 дня, просматривая статьи, и многие из них дали мне только половину моего ответа. У меня есть около 200 видео, которые все нужно конвертировать в пакетном режиме. У меня только windows на мой взгляд. Я успешно удалил первые 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.

1 Ответ

0 голосов
/ 04 августа 2020

Вот что получилось

@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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...