我正在嘗試運行此命令:
~ $ sudo ffmpeg -stream_loop -1 -re -i funnyVideo.mp4 -map 0:v -f v4l2 /dev/video2
每秒輸出它顯示的幀號:
... other ...
frame= 1 fps=0.0 q=-0.0 size=N/A time=00:00:00.03 bitrate=N/A speed=0.0665x
然后最后一行被新顯示的幀號替換。
frame= 23 fps= 23 q=-0.0 size=N/A time=00:00:00.76 bitrate=N/A dup=15 drop=0
等等。我正在嘗試等待字串“frame = 205”,執行另一個腳本并讓該程序繼續:
while IFS= read -r line; do
if [[ "$line" =~ "frame= 205" ]]; then
echo "Frame 205 has been reached"
break;
fi
done < <(sudo ffmpeg -stream_loop -1 -re -i funnyVideo.mp4 -map 0:v -f v4l2 /dev/video2)
我不知道這里發生了什么。即使我可以在一段時間后看到包含文本的行,為什么它還是不echoing ?Frame 205 has been reachedframe= 205
uj5u.com熱心網友回復:
您可以看到它的事實是問題所在。您從不輸出您閱讀的行,那么它們是如何顯示的?這是因為他們沒有被捕獲。
要捕獲此類行,請將 stderr 重定向到 stdout<(sudo ffmpeg ... 2>&1)
然后,您會發現在這些更新之間ffmpeg不輸出\ns,這就是它使行更新到位的方式。您可以IFS= read -d $'\r' -r line改為使用讀取回車分隔符。
PS:幀數基于計時器,因此不是確定性的。有時它會給你frame= 205,有時frame= 209。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/483484.html
