Bash
這在“if 語句”中是否允許?
# optional cropping if [ "$1" == "cropit" ]; then ITS_CROP_TIME= mkdir cropped; for i in *.mp4; do ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4" rm -r *.mp4 cd cropped cp -r *.mp4 ../ fi # optional cropping
我是否允許以
ITS_CROP_TIME=
這種方式使用字元串(以擷取下面程式碼的輸出)?如果我現在把這個變數放在我的腳本中的某個地方,這些命令會在變數定義處執行嗎?那這個呢?這行得通嗎?
if [ "$1" == "cropit" ]; then ITS_CROP_TIME=mkdir cropped; for i in *.mp4; do ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4"; rm -r *.mp4; cd cropped; cp -r *.mp4 ../ fi
#!/bin/bash set -e if [ "$1" == "cropit" ]; then ITS_CROP_TIME="$( mkdir cropped; for i in *.mp4; do ffmpeg -i "$i" -filter:v "crop=1920:980:0:-100" cropped/"${i%.*}.mp4" done rm -r ./*.mp4 cd cropped cp -r ./*.mp4 ../ )" fi
我假設您想將該變數設置
ITS_CROP_TIME
為一組命令以便稍後執行?這就是函式的用途:
crop_all_in_dir () { local source_dir="$1" local dest_dir="$2" mkdir -p "$dest_dir" for file in "$source_dir"/*.mp4; do [ ! -f "$file" ] && continue ffmpeg -i "$file" -filter:v "crop=1920:980:0:-100" "$dest_dir/(basename "${file%.*}").mp4" done }
然後你可能想稍後在腳本中呼叫它
# optional cropping if [ "$1" = "cropit" ]; then crop_all_in_dir . cropped fi
即,裁剪
*.mp4
目前目錄中的所有文件,並將裁剪後的文件放在該cropped
目錄(目前目錄的子目錄)中,如果輸出目錄尚不存在,則創建輸出目錄。該功能以非破壞性方式進行裁剪,因此原始文件(您的
cp
等)的任何替換都將在該功能之外完成。