我有一个脚本,wacaw(http://webcam-tools.sourceforge.net/)将视频从我的网络摄像头输出到文件。我试图基本上将其流式传输到某种显示,即vlc,quicktime等,以获得“镜像”类型的效果。
除了改变wacaw的源代码之外,还有什么方法可以强制将脚本的文件输出到stdout,这样我可以将它管道输出到类似vlc的东西吗?甚至可以像这样流式传输视频吗?
感谢您的帮助!
更新:只是为了澄清:
运行wacaw脚本的格式如下:
./wacaw --video --duration 5 --VGA myFile
并输出文件myFile.avi。如果我尝试做一个命名管道:
mkfifo pipe
./wacaw --video --duration 5 --VGA pipe
输出文件pipe.avi
答案 0 :(得分:3)
您可以使用命名管道。使用mkfifo
创建管道,将该文件名传递给写入过程,然后使用其他进程从该文件中读取。我不知道特别是视频是否会以这种方式运作,但其他许多事情都是如此。
答案 1 :(得分:3)
至少在bash中你可以这样做:
原始命令:
write-to-file-command -f my-file -c
更新了命令:
write-to-file-command -f >(pipe-to-command) -c
write-to-file-command会认为>(管道到命令)是一个只写文件,pipe-command将在其stdin上接收文件数据。
(如果你只想输出stdout,你可以做
write-to-file-command >(cat)
)
答案 2 :(得分:2)
您也可以尝试使用tail -F myFile.avi
:
# save stdout to file stdout.avi
man tail | less -p '-F option'
(rm -f myFile.avi stdout.avi; touch myFile.avi; exec tail -F myFile.avi > stdout.avi ) &
rm -f myFile.avi; wacaw --video --duration 1 --VGA myFile
md5 -q myFile.avi stdout.avi
stat -f "bytes: %z" myFile.avi stdout.avi
# pipe stdout to mplayer (didn't work for me though)
# Terminal window 1
# [mov,mp4,m4a,3gp,3g2,mj2 @ ...]moov atom not found
#rm -f myFile.avi; touch myFile.avi; tail -F myFile.avi | mplayer -cache 8192 -
# Terminal window 2
#rm -f myFile.avi; wacaw --video --duration 1 --VGA myFile