在Bash脚本中将文件输出重新路由到stdout

时间:2011-04-28 18:18:10

标签: bash shell scripting webcam stdout

我有一个脚本,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

3 个答案:

答案 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