time = exec "ffprobe -i /video.mp4 -show_entries format=duration -v quiet -of csv='p=0'"
echo ${time}
此命令返回视频的持续时间。问题是。如何执行命令并将其返回值存储在变量中?
ffmpeg -i /video.mp4 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print \$NF }' | tail -1
我就是这样得到的
crop=*:*:*:*
问题是,是否可以将持续时间值与作物一起获取。并将作物和时间分别分成两个变量?
如何执行命令并将其返回值存储在变量中?
为了保存程序发送到标准输出设备的数据,我们使用
x=$(command ...)
or (我们用反引号x=`command ...`
包围命令)。等号两边不能有空格,否则会被解释为试图运行程序而不是给变量赋值。如何将作物检测中的持续时间和作物提取到变量中?
您正在尝试从命令结果中提取时间和作物:
为此,请使用最后一帧处理行,如下所示:
时间和作物位于表格行尾
t:0.514844 crop=1920:1072:0:4
。因此,awk
我们打印的不是一个字段,而是最后两个字段:awk '/crop/ {print $(NF-1), $NF}'
。或者我们不输出它,而是将其保存在两个变量中,最后打印:在这里,这是从位置开始的
substr(x, n)
行的一部分(编号从一开始)。也就是说,该命令可能如下所示:x
n
在最后两行中,我们
data
除以空格并将左/右边界分配给变量time
和crop
。但是,由于我们正在工作bash
并且只有 2 个字段,因此我们可以通过用空格截断后缀和前缀来实现此目的:此外,我们可以将其声明
data
为关联列表,并以定义它时可以使用的格式传递数据。它可能看起来像这样:您可以使用命令查看内容
declare -p data
。提取值:${data[time]}, ${data[crop]}