2011-04-28 2 views
1

J'ai un script, wacaw (http://webcam-tools.sourceforge.net/) qui produit la vidéo de ma webcam dans un fichier. J'essaie de diffuser ce flux vers une sorte d'affichage, par exemple vlc, quicktime, etc. pour obtenir un effet de type "miroir". En plus de modifier le code source de wacaw, y a-t-il un moyen de forcer la sortie du fichier vers stdout afin de pouvoir le rediriger vers quelque chose comme vlc? Est-il même possible de diffuser de la vidéo comme ça?Reroute sortie de fichier à stdout dans Bash Script

Merci pour votre aide!

MISE À JOUR: juste pour clarifier:

exécutant le script wacaw est formaté comme suit:

./wacaw --video --duration 5 --VGA myFile 

et il émet un myFile.avi de fichier. Si je tente de faire une pipe nommé:

mkfifo pipe 
./wacaw --video --duration 5 --VGA pipe 

il génère un fichier pipe.avi

Répondre

3

Vous pouvez utiliser des canaux nommés. Vous utilisez mkfifo pour créer le tuyau, remettre ce nom de fichier au processus d'écriture, puis lire à partir de ce fichier avec l'autre processus. Je ne sais pas si la vidéo en particulier fonctionnerait de cette façon, mais beaucoup d'autres choses le font.

+0

J'ai essayé et mis à jour ma description originale. N'a pas tout à fait travaillé pour cela, mais vraiment heureux de l'avoir appris. Très utile! –

+0

Oh, on dirait que wacaw veut * créer * un fichier avec un * nom * donné. Pouah. Peut-être que si vous «mkfifo pipe.avi»? Mais je parie pas. Il va probablement faire un fichier nommé 'pipe.avi.avi'. – drysdam

3

au moins en bash vous pouvez faire comme ceci:

commande d'origine:

write-to-file-command -f my-file -c 

commande Mise à jour:

write-to-file-command -f >(pipe-to-command) -c 

écriture à fichier-commande penseront> (pipe -to-command) est un fichier en écriture seule et pipe-commande recevra les données du fichier sur son stdin.

(Si vous voulez juste la STDOUT que vous pourriez faire

write-to-file-command >(cat) 

)

2

Vous pouvez également essayer d'utiliser 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 
Questions connexes