gpt4 book ai didi

bash:显示 ffmpeg 的过滤和动态输出

转载 作者:行者123 更新时间:2023-12-04 23:16:57 26 4
gpt4 key购买 nike

在此之后question他的答案部分解决了我的问题。
我想要一个 ffmpeg 的选定结果。
因此,使用此命令:

ffmpeg -y -i "${M3U2}" -vcodec copy -acodec copy "${Directory}/${PROG}_${ID}.mkv" 2>&1 | egrep -e '^[[:blank:]]*(Duration|Output|frame)'
结果是:
Duration: 00:12:28.52, start: 0.100667, bitrate: 0 kb/s
Output #0, matroska, to '/home/path/file.mkv':
但结果我错过了这条动态线:
frame= 1834 fps=166 q=-1.0 Lsize=    7120kB time=00:01:13.36 bitrate= 795.0kbits/s
这条线每秒都在变化。如何修改命令行以显示此行?我的程序应该读取这一行并就地显示“时间”更新。谢谢
解决方案:
ffmpeg -y -i "${M3U2}" -vcodec copy -acodec copy "${Directory}/${PROG}_${ID}.mkv" 2>&1 |
{ while read line
do
if $(echo "$line" | grep -q "Duration"); then
echo "$line"
fi
if $(echo "$line" | grep -q "Output"); then
echo "$line"
fi
if $(echo "$line" | grep -q "Stream #0:1 -> #0:1"); then
break
fi
done;
while read -d $'\x0D' line
do
if $(echo "$line" | grep -q "time="); then
echo -en "\r$line"
fi
done; }
感谢 ofrommel

最佳答案

您需要使用 CR(回车)作为分隔符来解析输出,因为这是 ffmpeg 用于在同一行上打印的内容。首先使用另一个带有常规分隔符的循环来迭代第一行以获得“持续时间”和“输出”:

ffmpeg -y -i inputfile -vcodec copy -acodec copy outputfile 2>&1 |
{ while read line
do
if $(echo "$line" | grep -q "Duration"); then
echo "$line"
fi
if $(echo "$line" | grep -q "Output"); then
echo "$line"
fi
if $(echo "$line" | grep -q "Stream mapping"); then
break
fi
done;
while read -d $'\x0D' line
do
if $(echo "$line" | grep -q "time="); then
echo "$line" | awk '{ printf "%s\r", $8 }'
fi
done; }

关于bash:显示 ffmpeg 的过滤和动态输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24548159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com