У меня есть следующий сценарий:
ffmpeg -i input.mp4 -stabilization-pass-1-stuff && \
ffmpeg -i input.mp4 -b:v xxxxk -stabilization-pass-2-h264-pass-1-stuff && \
ffmpeg -i input.mp4 -b:v xxxxk -h264-pass-2-output-stuff output.mp4
Как мне переписать скрипт так, чтобы мне приходилось предоставлять input.mp4 и битрейт xxxxk один раз в начале скрипта?
решение1
С переменными оболочки. «Не повторяться» — один из основных вариантов использования переменных оболочки:
#!/bin/sh
file='input.mp4'
bitrate='xxxxk'
ffmpeg -i "$file" -stabilization-pass-1-stuff &&
ffmpeg -i "$file" -b:v "$bitrate" -stabilization-pass-2-h264-pass-1-stuff &&
ffmpeg -i "$file" -b:v "$bitrate" -h264-pass-2-output-stuff output.mp4
Примечания:
Ваш сценарий не содержитпритон. В таком случаеинтерпретатор зависит от оболочки, из которой вы вызываете скрипт. В общем, не стоит упускать шебанг. Я добавил
#!/bin/sh
по двум причинам:- показать, как выглядит шебанг;
- чтобы указать, что переменные оболочки — это довольно простая концепция, которая работает в
sh
, поэтому можно ожидать, что тот же код будет работать в любой оболочке, которая пытается соответствовать POSIX.
- Цитирование важно.