确定视频何时完成缓冲

时间:2011-12-22 16:25:56

标签: shell scripting

我前几天正在编写这个小脚本。这是一个小程序,基本上可以在浏览器中找到flash视频并下载它们。 代码就是这样......

代码:

path=$(stat -c %N /proc/*/fd/* 2>&1|awk -F[\`\'] '/lash/{print$2}')
pid=$(echo $path | cut -d / -f3)
name=$( ps --no-header -o comm -p $pid)
mid=$(wmctrl -l | grep -i $name)
filename=`echo $mid | cut -c 21-$(($(echo $mid | wc -c)-16))`
cp $path /home/Downloads/"$filename.avi"

这只是代码的一部分。代码的第一行获取已删除临时文件的路径。第二行获取pid。第三个进程名称。第四个是窗口id和窗口标题。第五行操纵wmctrl输出以提取视频播放的名称(大多数时候视频名称包含在窗口标题中...例如youtube )

现在,当整个视频缓冲后运行此脚本时,它运行完美(上面的脚本适用于谷歌浏览器)..并将文件从/ proc // fd文件夹复制到downloads文件夹并更改其名称提取的文件名。

现在这里有诀窍部分。我想自动化这段代码,比如,我现在要运行这段代码,我必须等待视频完成缓存(比如youtube)。

我希望此脚本确定视频何时完成缓冲,然后继续复制部分,而不必在视频结束时手动运行它。

那么有什么方法可以让我知道视频何时完成缓冲?

我是初学者。欢迎任何改进代码的建议

1 个答案:

答案 0 :(得分:0)

获取文件大小,您可以使用:

stat -c %s $filename

这样你可以设置一个while循环来检查文件是否仍在改变

CURSIZE=0
LASTSIZE=1
while ([ $CURSIZE -ne $LASTSIZE ]) do
  LASTSIZE=`stat -c %s $filename`
  sleep 1
CURSIZE=`stat -c %s $filename`
done

之后,您应该能够复制它,假设您的互联网连接没有打嗝超过睡眠值