2017-02-05 53 views
1

我使用这个ffmpeg的说法得到一个文件中的黑框:重新格式化输出中的Bash

[blackdetect @ 0x7fd9add06bc0] black_start:0 black_end:3.2 black_duration:3.2 

ffmpeg -i ${arrayDesFichiers[$i]} -vf "blackdetect=d=3:pix_th=0.00" -an -f null - 2>&1 | grep black_duration >> log.txt 

现在,我在我的log.txt得到这我想重新格式化为这样的东西:

black duration : 3.2 seconds 

我很确定它可能在Bash,但如何?

+0

我建议使用** grep **来选择你想要的字符串和** sed **来包装冒号与空白...或使用** awk **。 – Jdamian

+0

我正在尝试使用sed,但哦,我的男孩我有这样一个困难的时间正则表达式......我可以说“替换所有以'black_duration'结尾的东西吗?”? – petaire

+0

我不明白你为什么接受@ codeforester的答案。在您的问题文本中,您**请求重新格式化**'black_duration:3.2',这不能由'grep'命令完成。 – Jdamian

回答

1

你可以这样做:

ff_output=$(ffmpeg -i ${arrayDesFichiers[$i]} -vf "blackdetect=d=3:pix_th=0.00" -an -f null - 2>&1 | grep -oE "black_duration:[[:digit:]][.[:digit:]]*") 
printf "%s seconds\n" "$ff_output" >> log.txt 

grep -oE "black_duration:[[:digit:]]+[.[:digit:]]*

  • -o选项限制grep输出只匹配部分
  • -E选择扩展的正则表达式
  • [[:digit:]]+[.[:digit:]]*寻找一个或多个数字,可选后跟一个句点和一个或多个数字
+0

我意识到这个限制并修改了正则表达式来寻找一个可选的小数部分。 – codeforester