Это работает в командной строке для последовательности jpg для преобразования в видео.
cat *.jpg | ffmpeg -f image2pipe -framerate 5 -i - -s 1280x720 ./HD720_out.mp4
но не работает (кроме первого jpg) в исполняемом скрипте temp.sh, содержащем:
eval cat "$1" | ffmpeg -f image2pipe -framerate 5 -i - -s 1280x720 "./HD720_out.mp4"
например ./temp.sh *.jpg
дает видео только первый файл, а не последовательность. Что я делаю не так? Командная строка работает отлично.
Упрощенный: $1
расширяется до первого аргумента командной строки сценария.
Но до того, как ваш скрипт интерпретирует оболочку, запущенный temp.sh сначала расширит звездочку * в ./temp.sh *.jpg
, что фактически приводит к появлению командной строки:
./temp.sh first.jpg second.jpg third.jpg
\
\_ $1
У вас есть два способа обойти это. Первый (и предпочтительный):
cat "$@" | ...
будет использовать все параметры командной строки, а не только первый. Тебе не нужно eval
для этого и не следует его использовать.
Второй (где eval
вступает в игру):
eval cat "$1" |
при вызове скрипта с параметрами в кавычках, чтобы избежать расширения:
./temp.sh '*.jpg'