EDITループを分離したので、奇妙な組み込みループのジャンクに遭遇せず、まだセグメンテーション違反が発生しています。以下のコードブロックを更新しました。残念ながら、エコーを追加することはもう機能しないため、「できた!」にはできません。エコーコマンド。
スクリプトの引数からファイルを取得し、それらをビデオと画像シーケンスに分離してからリストに追加するシェル スクリプトがあります。このリストは、後でバッチ エンコーディングのために ffmpeg に渡されます。奇妙なことに、これを行うためにセットアップしたループは、ループの先頭に echo ステートメントを追加しない限り、「Segmentation Fault 11」を返します。見てみな:
## Build list of files to encode, using only files from approved extensions list.
argument_files=()
filelist=()
echo "Building file list."
for argument in $@; do
OLDIFS=$IFS
IFS=$'\n'
argument_files+=($(find "$argument" -type f | grep -e ".*/.*\.\($filters)"))
IFS=$OLDIFS
done
for thisfile in $argument_files; do
echo $thisfile
if [[ "$thisfile" =~ .*\.($sequence_exts) ]]; then
has_sequences="y"
inlist="n"
tempdir=$(dirname "$thisfile")
tempext=$(basename "$thisfile" | sed 's/.*\.\(.*\)/\1/')
tempname=$(basename "$thisfile" | sed 's/\(.*\)\..*/\1/')
collection=$(echo "$tempname" | sed 's/[0-9]*$//')
chartemp=$(echo "$tempname" | grep -o -m 1 -e '[0-9]*$')
if [[ "$chartemp" != [0-9]* ]]; then
continue
fi
charcount=`printf "%02d" ${#chartemp}`
new_path="${tempdir}/${collection}%${charcount}d.${tempext}"
for e in ${filelist[@]}; do
if [[ "$e" == "$new_path" ]]; then
inlist="y"
break
fi
done
if [[ "$inlist" == "n" ]]; then
OLDIFS=$IFS
IFS=$'\n'
filelist+=("$new_path")
IFS=$OLDIFS
fi
elif [[ "$thisfile" =~ .*\.($mov_exts) ]]; then
OLDIFS=$IFS
IFS=$'\n'
filelist+=("$thisfile")
IFS=$OLDIFS
fi
done
echo "I made it!"
ご存知のように、最初の if ステートメントは、イメージ シーケンスをフィルター処理し、それらを ffmpeg が必要とする name%0Nd.jpg 形式に変換するために使用されます。また、同じ画像シーケンスがまだバッチ リストに追加されていないことを確認しようとします。これは私には本当にハッキーに感じます。だったらごめんなさい。