我正在使用FFMPEG
捕捉video的项目。 FFMPEG
命令是:
ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" -b 5000k -s 1280x720 c:/test/sample.avi
链接: https : //www.tcl.tk/man/tcl8.5/tutorial/Tcl26.html使用命令:
exec myprog &
在这里他们没有指定什么是myprog
。
链接: 在后台运行shell命令,在tcl proc中使用命令:
eval exec [linsert $args 0 exec] >> $tempFile &
这里的命令不被接受为eval
, exec
是一个接一个的,所以它把exec
作为一个variables。
帮助我,写权利的命令,可用于捕获我的video在TCL version 8.0
和Windows 7
的背景。
这一行的问题:
eval exec [linsert $args 0 exec] >> $tempFile &
是多重的。 首先,你有一个双重exec
(不太可能是你想要的!)。 其次,尽管运行在平台上的文件名经常有空格,但是最后还是有一段文件没有被列表保护,这使得文件名有点像时间炸弹一样等待下线(尽管我认为这不是在Windows 7上与在较旧版本上一样坏,其中常见的可写位置在文件名中具有空格)。
现在,如果您使用的是支持的Tcl版本,那么我们建议您将其编写为:
exec {*}$args >> $tempFile &
(事实上,这种事情是{*}
语法的关键用例之一。)
然而,你是一个古老的版本,所以我们必须以其他方式做事。 它仍然有帮助,因为它指导我们需要在整个列表中插入非列表参数:
eval [linsert [linsert $args 0 exec] end >> $tempFile &]
是的,这很难阅读,而且容易出错。 你为什么认为我们改变了基础语言来解决这个问题呢? (几乎没有人直接使用eval
,这大大降低了大多数人的代码缺陷率。)
下面是答案,它适用于Windows 7平台,TCL版本8.0和FFMPEG在后台捕获视频。
proc a {} { exec ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" c:/test/sample-a.avi >& c:/temp.txt & } a // here >& divert the, the log will be saved in temp.tet file and & helps to run the command in background.