ffmpeg: bash スクリプトにスペースがあるファイル名

ffmpeg: bash スクリプトにスペースがあるファイル名

ffmpegを使用してmp3ファイルを自動的にリンクするために、次のbashスクリプトを作成しました。

i=0
for f in "${@:2}"
do
        filter+="[$i:a:0]"
        i=`expr $i + 1`
        files+="-i $f "
done
filter+="concat=n=$i:v=0:a=1[outa]"
ffmpeg $files -filter_complex $filter -map '[outa]' "$1.mp3"

ただし、ファイル名にスペースを含むファイルを処理する必要があることがよくありますが、端末にドラッグするとすべてのスペースがエスケープされ、次のコマンド呼び出しが生成されます。

./mergemp3.sh outfilename /path/to/my\ file\ with\ spaces.mp3 /path/to/another\ file\ with\ spaces.mp3 

私にとってはこれが正しいようです。しかしffmpegは失敗します

/path/to/my: No such file or directory

明らかに、ffmpegはバックスラッシュで正しくエスケープされたにもかかわらず、ファイル名のスペースを理解していません。ファイル名のリストに関する良い詳細があると思います。どんなアイデアがありますか?

ベストアンサー1

コマンドラインを作成するときは、明確さと安全性のために配列を使用することをお勧めします。

files=()
i=0
for f in "${@:2}"
do
        filter+="[$((i++)):a:0]"
        files+=(-i "$f")
done
filter+="concat=n=$i:v=0:a=1[outa]"
ffmpeg "${files[@]}" -filter_complex "$filter" -map '[outa]' "$1.mp3"

おすすめ記事