случайность поведения командной строки ffmpeg

#ffmpeg

#ffmpeg

Вопрос:

Я пытаюсь использовать функции -vf drawtext в ffmpeg.

Следующая команда выполняется успешно

 ffmpeg -y -i "C:2.avi" -preset ultrafast -crf 18 -vf  drawtext=text=stackoverflow:fontfile=C:/WINDOWS/Fonts/georgia.ttf C:o.mkv
  

Однако, как только мы изменим команду (измените позиции fontfile= с текстом=

 ffmpeg -y -i "C:2.avi" -preset ultrafast -crf 18 -vf  drawtext=fontfile=C:/WINDOWS/Fonts/georgia.ttf:text=stackoverflow C:o.mkv
  

Я получаю следующие ошибки

[Parsed_drawtext_0 @ 02d88a80] Не удалось загрузить шрифт «C»: невозможно найти подходящий шрифт

[AVFilterGraph @ 02c86a20] Ошибка инициализации фильтра ‘drawtext’ с аргументами ‘fontfile=C:/WINDOWS/Fonts/georgia.ttf:text=stackoverflow:’Ошибка открытия фильтров!

Я не понимаю, почему изменение одних и тех же параметров может повлиять на общий результат, это вызывает у меня реальные проблемы, потому что каждый раз, когда я добавляю к этому запросу, я должен задаться вопросом, просто ли это позиционирование параметров или я действительно делаю что-то неправильно.

Ответ №1:

Проблема в том, что в пути используется двоеточие ( : ), которое также является разделителем для аргументов. На самом деле я ожидал, что обе командные строки завершатся ошибкой…

В документах указано, что вам нужно избегать двоеточий в целом, а также привести конкретный пример для drawtext

Обратите внимание, что двоеточия необходимо экранировать.

 drawtext='fontfile=Linux Libertine O-40:style=Semibold:text=FFmpeg'
  

Итак, работает следующее (Windows немного разбирается в том, как экранировать содержимое в оболочке, например, без экранирования в одинарных кавычках, так что вам также нужно экранировать )

 drawtext=fontfile=C\:/WINDOWS/Fonts/georgia.ttf:text=stackoverflow
  

Комментарии:

1. Проверю это в ближайшее время, кажется логически правильным. Спасибо, что указали на это. В целом, хотя вы могли бы предположить, что если это так, это приведет к сбою, какой бы порядок он ни был указан, но это не так…