Я пытаюсь сделать что-то, что должно быть простым - пытаюсь использовать Raspberry Pi ffmpeg для захвата 30-секундного видео из потока RTSP. Команда выглядит так:
ffmpeg -i <rtsp:...> -t 30 <output>
Строка RTSP становится длинной (70-80 символов или около того). Она всегда терпит неудачу с:
[1] 5436
bash: -t command not found
Это проблема ffmpeg или проблема конфигурации Raspberry Pi?
Я пытался исследовать ограничения длины аргументов, но ничего не вышло.
решение1
Вероятно, в URL-адресе потока есть &
символ. В командной строке вам нужно экранировать его с помощью \
, так как это специальный символ в bash, который разделяет команды:
ffmpeg -i rtsp://host/path?param1=\¶m2= -t 30
Обратите внимание на \&
. Если это не амперсанд, то какой-то другой специальный символ.
Или просто заключите URL в двойные кавычки и дело с концом:
ffmpeg -i "rtsp://host/path?param1=¶m2=" -t 30
Причина возникновения этой ошибки:
bash: -t command not found
Потому что, если в вашем URL где-то есть амперсанд, bash (по сути) пытается выполнить две команды. Так что если у вас есть (я делаю обоснованное предположение о вашем URL):
ffmpeg -i rtsp://example.com?x=0&y=0 -t 30
Bash пытается запустить:
-
ffmpeg -i rtsp://example.com?x=0
-
y=0 -t 30
Где второй разбирается как "установить переменную окружения, y
чтобы 0
затем выполнить команду -t
с одним параметром 30
", и -t
не является фактической командой. Отсюда и ошибка.
Ваша ситуация может быть не совсем такой, насколько я могу судить, но общая идея такова.
Подробности поведения bash выходят за рамки этого ответа и обычно опускаются для краткости.
Это проблема ffmpeg или проблема конфигурации Raspberry Pi?
Я пытался исследовать ограничения длины аргументов, но ничего не вышло.
Кстати, ограничения по длине аргументов здесь не имеют значения. :) Это так.очень большой. Он также жестко запрограммирован в ядре, поэтому для него нет параметров пользовательской конфигурации.