Почему поведение ffmpeg изменяется при запуске через bat-скрипт, в отличие от запуска напрямую через командную строку (cmd)?

Здравствуйте! <br/> <br/> Ранее я использовал команду ffmpeg для конвертации изображений в видео через командную строку (cmd): <br/> <pre><code>ffmpeg -f image2 -start_number 1 -i "C:\OSPanel\ffmpeg\64646_Create20240927163401_\%d.png" 1.mp4</code></pre> <br/> <br/> Однако, когда я запускаю тот же скрипт через файл .bat, возникает следующая ошибка: <br/> <pre><code>[image2 @ 00000245c7161340] Could find no file with path 'C:\OSPanel\ffmpeg\64646_Create20240927163401_\d.png' and index in the range 1-5
[in#0 @ 00000245c714a480] Error opening input: No such file or directory
Error opening input file C:\OSPanel\ffmpeg\64646_Create20240927163401_\d.png.
Error opening input files: No such file or directory</code></pre> <br/> <br/> Таким образом, команда работает в cmd, но выдает ошибку в .bat. Как можно решить эту проблему?
  • 27 сентября 2024 г. 16:53
Ответы на вопрос 2
Здравствуйте!

Поведение `ffmpeg` может меняться при запуске через `.bat` файл из-за различий в интерпретации путей и переменных окружения между командной строкой (cmd) и файлами `.bat`. В вашем конкретном случае проблема заключается в том, что при выполнении в пакете (`.bat`) символ `%` может интерпретироваться как начало переменной окружения.

Когда вы пишете `%d.png` в командной строке, она интерпретирует это как литерал, но в `.bat` файле `%d` ожидает переменную окружения, поэтому происходит ошибка.

Чтобы исправить эту проблему, вам нужно экранировать символ `%`, используя `%%`. Ваш скрипт должен выглядеть так:

```bat
ffmpeg -f image2 -start_number 1 -i "C:\OSPanel\ffmpeg\64646_Create20240927163401_\%%d.png" 1.mp4
```

Попробуйте сделать именно так, и это должно решить вашу проблему. Если у вас есть другие вопросы, не стесняйтесь обращаться!
Потому что в bat % воспринимается как спецсивол, а в cmd - нет. 
Тупо сравни echo "%d" .
Надо экранировать: %%d .

Почему так? Хз, не особо шарю за bat, гуглить надо.:)
Но скорее всего ответ, как обычно: "так исторически сложилось".
Похожие вопросы