0

我想在 for 循环中启动多个 FFmpeg 会话。这是我的脚本:

# start recording for all cams
for i in `seq 1 ${CAM_NO}`
do
    /home/aydu/bin/ffmpeg -f video4linux2 -i /dev/video${i} -y -c:v libx264 -r 5 -s 320x240 -vf format=gray $DIR/CAM${i}_${DTIME}.avi -r 1/5 -vf format=gray -f image2 -updatefirst 1 $DIR/webcam${i}.jpeg
done

问题是会话不是按顺序开始的。例如,当且仅当第一个进程停止、关闭、完成或终止时,第二个进程才会启动。

如何启动多个会话?

4

1 回答 1

2

如果要并行运行进程,则需要&在进程执行行的末尾放置一个 & 符号,以告知 shell 您希望它在后台运行。

例如,此命令按顺序运行五个进程(大约十秒):

$ date;for i in 1 2 3 4 5;do sleep 2;done;date
Tue, Sep 10, 2013  4:05:32 PM
Tue, Sep 10, 2013  4:05:43 PM

而这个只需要两秒钟,因为它们是并行运行的:

$ date;for i in 1 2 3 4 5;do sleep 2 & done;wait;wait;wait;wait;wait;date
Tue, Sep 10, 2013  4:05:45 PM
[1] 6116
[2] 4940
[3] 7040
[4] 6944
[5] 3592
[1]   Done                    sleep 2
[2]   Done                    sleep 2
[3]   Done                    sleep 2
[4]-  Done                    sleep 2
[5]+  Done                    sleep 2
Tue, Sep 10, 2013  4:05:47 PM
于 2013-09-10T08:02:12.713 回答