2017-02-05 71 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