M. *_*. P 0 windows video ffmpeg tcl video-streaming
我正在开发一个用于FFMPEG捕获视频的项目。命令FFMPEG是:
ffmpeg -f dshow -t 00:00:10 -i "video=Integrated Webcam" -b 5000k -s 1280x720 c:/test/sample.avi
Run Code Online (Sandbox Code Playgroud)
链接: https: //www.tcl.tk/man/tcl8.5/tutorial/Tcl26.html使用命令:
exec myprog &
Run Code Online (Sandbox Code Playgroud)
这里他们没有具体说明是什么myprog。
链接:在后台运行 shell 命令,在 tcl proc 中使用命令:
eval exec [linsert $args 0 exec] >> $tempFile &
Run Code Online (Sandbox Code Playgroud)
这里的命令不被接受为eval一个exec接一个,所以它作为exec一个变量。
TCL version 8.0帮助我,使用 write right 命令,该命令可用于使用和来在后台捕获我的视频Windows 7。
这一行的问题:
eval exec [linsert $args 0 exec] >> $tempFile &
Run Code Online (Sandbox Code Playgroud)
是多重的。首先,你有一个双倍exec(不太可能是你想要的!)。其次,尽管在文件名中经常有空格的平台上运行,但最后有一段不受列表保护,使得文件名有点像等待爆炸的定时炸弹(尽管我认为它不是) Windows 7 上的情况与旧版本上的情况一样糟糕,其中常见的可写位置的文件名中包含空格)。
现在,如果您使用的是受支持的 Tcl 版本,那么我们建议将其编写为:
exec {*}$args >> $tempFile &
Run Code Online (Sandbox Code Playgroud)
(事实上,这类事情是语法的关键用例之一{*}。)
然而,你使用的是古老的版本,所以我们必须以其他方式做事。上面的内容仍然有帮助,因为它指导我们需要在整个列表中插入非列表参数:
eval [linsert [linsert $args 0 exec] end >> $tempFile &]
Run Code Online (Sandbox Code Playgroud)
是的,这很难读,而且写起来很容易出错。您认为为什么我们从字面上改变了基本语言以添加一些内容来解决这个问题?(几乎没有人eval再直接使用,这大大降低了大多数人代码中的缺陷率。)