我正在做一个项目,在那里我使用FFMPEG捕捉视频。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。
链接:Running shell commands in background, in a tcl proc使用命令:
eval exec [linsert $args 0 exec] >> $tempFile &在这里,命令不被接受,因为eval和exec是一个接一个的命令,因此它将exec作为变量。
帮助我,使用写右命令,它可以用来用TCL version 8.0和Windows 7在后台捕捉我的视频。
发布于 2017-11-18 08:08:51
这一行的问题是:
eval exec [linsert $args 0 exec] >> $tempFile &是多重的。首先,您有一个双exec (不太可能是您想要的!)第二,在文件名中通常有空格的平台上运行的平台上没有列表保护,这使得文件名有点像等待运行的定时炸弹(虽然我认为Windows 7的情况并不像以前的版本那样糟糕,因为在旧版本中,普通的可写位置在文件名中有空格)。
现在,如果您使用的是(一个受支持的Tcl版本),那么我们建议将其编写为:
exec {*}$args >> $tempFile &(实际上,这类事情是{*}语法的关键用例之一。)
然而,你是在一个古老的版本,所以我们必须采取另一种方式。当我们需要在整个列表中插入非列表参数时,它仍然帮助我们获得了上面的内容:
eval [linsert [linsert $args 0 exec] end >> $tempFile &]是的,这是很难读和容易写错。为什么您认为我们确实改变了基本语言来解决这个问题呢?(几乎没有人再直接使用eval了,这大大降低了大多数人代码中的缺陷率。)
发布于 2017-11-21 11:57:10
以下是在windows 7平台上使用TCLVersion8.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.
https://stackoverflow.com/questions/47321957
复制相似问题