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"

おすすめ記事