Назад | Перейти на главную страницу

Bash script ffmpeg pic для видео не работает, но работает в командной строке

Это работает в командной строке для последовательности 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'