bashを使用してffprobeファイル名のスペースを正しくエスケープする方法

bashを使用してffprobeファイル名のスペースを正しくエスケープする方法

ffprobeを使用してビデオファイルからパラメータを抽出し、その結果に基づいて処理しようとしています。ただし、ファイルにスペースが含まれていると、ファイルをffprobeに正しく渡すことはできません。

echo $1

inputfile=$(printf '%q' "$1")
#inputfile=${1@Q}

echo $inputfile

ffprobeout= ffprobe -v error -select_streams v:0 -show_entries stream=width,height,bit_rate -of csv=s=x:p=0 $inputfile

files2reenc.sh "test file with spaces.mp4" これで結果を含むサンプルファイルを呼び出すと

test file with spaces.mp4
test\ file\ with\ spaces.mp4

Argument 'file' provided as input filename, but 'test' was already specified.

したがって、ffprobeは名前の各部分を別々のファイルとして扱い、それをパラメータとして認識しません。期待どおりに動作するように入力を転送/エスケープする方法がわかりません。 bashスクリプトを呼び出すときに問題が発生したのか、それとも入力パラメータを処理しようとしたときに問題が発生したのかわかりません。私も試してみましたが、 echo $inputfile | xargs -0 ffprobe ...成功しませんでした。

答え1

クイックヒントrAlenに感謝します。変更されていない入力を使用し、単に引用する必要がありました。

inputfile=$1
ffprobeout= ffprobe -v error -select_streams v:0 -show_entries stream=width,height,bit_rate -of csv=s=x:p=0 "$inputfile"

答え2

行の連続が長い行の読みやすさに役立つ可能性があることは間違いありません。

ffprobeout= ffprobe -v error \
                    -select_streams v:0 \
                    -show_entries stream=width,height,bit_rate \
                    -of csv=s=x:p=0 \
                    "$inputfile"

関連情報