基本上(希望)我想从网络摄像头录制视频流并将其保存在特定目录中,然后在用户输入一些数字时将其删除。我没有这么好解释,所以这就是我现在正在做的事情:
#!/bin/bash
while true
do
TIMESTAMP=$(date +"%Y.%m.%d_%H.%M")
read -p "Enter your number here: " YOURNUMBER
echo -e "Saving video stream:"
mkdir /home/$USER/orders/$YOURNUMBER
avconv -f video4linux2 -r 3 -fs 52428800 -i /dev/video0 /home/$USER/orders/$YOURNUMBER/$TIMESTAMP-$YOURNUMBER.avi
echo -e "Video complete!"
done
所以我想停止录制并在新的$ YOURNUMBER文件夹中开始新的操作。有任何想法吗? (相当新的......耐心等待!)
更新
感谢@TrueY
更新了脚本(不需要mkdir真的这么做了):
CPID=0
while :; do
read -p "Enter your number here: " YOURNUMBER
[ $CPID -ne 0 ] && kill -INT $CPID
TIMESTAMP=$(date +"%Y.%m.%d_%H.%M")
avconv -f video4linux2 -r 3 -fs 52428800 -i /dev/video0 /home/$USER/orders/$YOURNUMBER[packed-$TIMESTAMP].avi > /dev/null 2>&1 &
CPID=$!
done
唯一的问题是我(或最终用户)必须在再次开始录制之前输入两次数字。
答案 0 :(得分:2)
<强>已更新强>
尝试这样的事情(OP的代码稍作修改):
#!/usr/bin/bash
stop() { [ $CPID -ne 0 ] && kill -INT $CPID && wait $CPID && echo "Killed $CPID"; }
trap "stop; exit" INT
CPID=0
while :; do
read -p "Enter your number here: " YOURNUMBER
stop
[ "$YOURNUMBER" == quit ] && break;
TIMESTAMP=$(date +"%Y.%m.%d_%H.%M")
avconv -f video4linux2 -r 3 -fs 52428800 -i /dev/video0 /home/$USER/orders/$YOURNUMBER/$TIMESTAMP-$YOURNUMBER.avi&
CPID=$!
echo -e "Video complete!"
done
这会在后台启动avconv,以便用户输入新号码。也许avconv的stdout和stderr应该重定向到日志文件或/ dev / null。还应测试哪个信号优先停止avconv。 -INT
相当于ctrl + c。它不起作用,如果没有其他帮助,请尝试-HUP
,-TERM
甚至-KILL
。也许你应该实现一个trap
来捕捉INT
信号来杀死最后avconv它按下ctrl + c。