我正在尝试使用 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"