如何使用 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"

相关内容