2013-07-10 1 views
0

기본적으로 (잘하면) 웹캠에서 비디오 스트림을 녹화하고 특정 디렉토리에 저장 한 다음 사용자가 숫자를 입력 할 때이를 삭제하려고합니다. 그래서 여기에 잘 설명 나는 현재하고 있어요 무엇 아니에요 :사용자 입력에서 avconv Bash 스크립트를 멈추고 루프를 계속하십시오.

#!/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 폴더에 새를 시작하고자합니다. 어떤 아이디어? (아주 새로운 환자를 this..be합니다!)

는 업데이트 : @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 

만 문제는

답변

2

업데이트 ... I (또는 최종 사용자)가 다시 녹화를 시작하기 전에 두 번 번호를 입력하는 것입니다 이 같은

시도 뭔가 (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을 시도하십시오. 어쩌면 을 구현하여 INT 신호를 수신하여 마지막으로 을 죽일 수 있습니다. ctrl + c를 누를 수도 있습니다.

+0

거의 다! 고맙습니다! 유일한 것은 내가 다시 녹음하기 전에 나 (또는 ​​최종 사용자)가 번호를 두 번 입력해야한다는 것입니다. 함정을 구현하려면 어떻게해야합니까? (미안, 사실 처음 몇 일 동안이 모든 일에 - 꽤 재미 있네!) –

+0

"INT"신호는'avconv'를 상당히 우아하게 멈추었으므로, 죽인 후 몇 초간자는 것이 좋습니다. – TrueY

+0

문자 그대로 잠자 지 5 분 정도입니까? 또한, 그것은 어디로 가야합니까 (미안 해요, 결국 이해할 것입니다!) –

관련 문제