我在bash中的脚本知识是非常基础的,我在过去拼凑了一些东西来完成我多年来需要的自动化。
最新项目是关于一些视频处理,并根据文件的格式,我想做一些后期处理。
ffprobe将输出有关视频文件的元数据,摘录如下:
ISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
TAG:language=eng
[/STREAM]
[STREAM]
index=1
codec_name=dts
codec_long_name=DCA (DTS Coherent Acoustics)
profile=DTS
codec_type=audio
codec_time_base=1/48000
codec_tag_string=[0][0][0][0]
特别是,我想检测字符串codec_name=dts
是否存在,然后获取前一行中表示的索引值。在上面的情况中,它确实包含codec_name=dts
,我希望以后能够在脚本中使用值1
,因为它前面的行index=1
。
在我的脚本中,我使用这个逻辑使用grep:
进行第一次字符串检测if (/usr/sbin/ffprobe -show_streams -i "$source" | grep -q "codec_name=dts"); then
<do some work here>
fi
做我想完成的事情的最佳方式是什么?
答案 0 :(得分:1)
我建议:
| awk -F "=" '$1=="index"{i=$2}; /codec_name=dts/{print i}'
答案 1 :(得分:0)
使用grep
,您可以检查输出中index=?
后面是否code_name=dts
。如下所示:
#!/bin/bash
/usr/sbin/ffprobe -show_streams -i "$source" > metadatafile.txt
val=$(grep -B1 'codec_name=dts' metadatafile.txt | grep -o -P '(?<=index=)[0-9]+$')
# Make sure $val is a number, kinda redundant because above `grep` takes care of that.
if [[ $val =~ ^[0-9]+$ ]]; then
echo "Doing some work here with $val"
fi