【问题标题】:Stop avconv Bash script on user input and continue loop在用户输入时停止 avconv Bash 脚本并继续循环
【发布时间】:2013-07-08 04:43:27
【问题描述】:

基本上(希望)我想从网络摄像头录制视频流并将其保存在特定目录中,然后在用户输入一些数字时将其终止。我没有很好地解释这一点,所以这就是我目前正在做的事情:

#!/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

唯一的问题是我(或最终用户)必须输入两次号码才能再次开始录制。

【问题讨论】:

    标签: bash while-loop avconv


    【解决方案1】:

    更新

    试试这样的(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
    

    这会在后台启动,以便用户可以输入新号码。也许 的stdout 和stderr 应该重定向到日志文件或/dev/null。还应该测试哪个信号优雅地停止-INT 相当于 ctrl+c。如果它不起作用,请尝试-HUP-TERM 甚至-KILL,如果没有其他帮助。也许你应该实现一个trap 来捕捉INT 信号来杀死最后一个 它按ctrl+c。

    【讨论】:

    • 快到了!谢谢!唯一的问题是我(或最终用户)必须输入两次数字才能再次开始记录。如何实施陷阱? (抱歉,这整件事的头几天确实很有趣!)
    • "INT" 信号停止avconv 相当优雅,所以也许你应该在杀死后几秒钟睡觉。
    • 这真的只是 sleep 5 或类似的吗?还有,这是怎么回事(对不起,我最终会明白的!)
    • @ElliotReed:我更新了我的 A。它包含 trap 部分,它在 kill -INT 之后等待 avconv 完成。试试看!
    • @ElliotReed:我很高兴!
    猜你喜欢
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多