2016-02-02 104 views
1

當我打印從ffmpeg的輸出到一個文件,我得到這樣的:覆蓋匹配

[...] 
frame= 28 fps=0.0 q=-0.0 size=N/A time=00:00:01.16 bitrate=N/A speed=2.31x  
frame= 55 fps= 54 q=-0.0 size=N/A time=00:00:02.24 bitrate=N/A speed= 2.2x  
frame= 84 fps= 55 q=-0.0 size=N/A time=00:00:03.40 bitrate=N/A speed=2.22x  
frame= 112 fps= 54 q=-0.0 size=N/A time=00:00:04.52 bitrate=N/A speed=2.17x  
[...] 

現在我想的是,與frame=*相匹配的所有行會被替換,只有最後的當前行獲取打印到文本文件(實時)。

這可能嗎?

目前,我有這樣一行:

ffmpeg -v info -i input.ext -f null 2>&1 | awk '/frame=/{gsub(/.*/, $0)};{print}'

它的工作原理差不多了,除了所有符合包含frame=*是空的。

回答

1

您可以從AWK內截斷文件和每行寫一次吧,像這樣:

awk '/frame=/ { close("file"); print > "file" }' 

當您在使用AWK >,它打開並寫入之前截斷該文件。隨後寫入相同的文件被附加。如果您每次關閉文件,那麼它在下次寫入時將始終截斷它。

0

您可以使用此過濾器:

awk '/frame=/{f=$0; next}END{print f}' 

它節省了最新的行f匹配frame=,而不進行打印,並在腳本的末尾打印保存的值。

+0

謝謝邁克爾,這個問題是,當ffmpeg完成這個過程時,我得到了結果。但是當ffmpeg運行時,我需要輸出,所以我可以實時捕獲日誌文件。 –