como converter um script usando pipelines para pipes nomeados

2

Eu tenho um script bash que está usando pipes anônimos para alcançar:

  • capturando vídeo do dispositivo de captura dv
  • escrevendo em um arquivo (usando tee)
  • canalizando para ffmpeg2theora (convertendo para ogv / theora video)
  • escrevendo em um arquivo (usando tee)
  • encaminhando para o oggfwd para enviá-lo ao servidor de streaming icecast

Como eu poderia conseguir isso usando pipes nomeados (fifos), para que eu pudesse ter processos separados que eu pudesse controlar separadamente?

Eu estava usando este script:

 #!/bin/bash
 while (true); 
 do
    dvgrab --format dv1 - | \
    tee /filename_'date +%y%m%d_%H%M%S'.dv | \
    ffmpeg2theora.linux -f dv -x 382 -y 288 -v 3 --speedlevel 2 --no-skeleton -o /dev/stdout - | \
    tee /filename_'date +%y%m%d_%H%M%S'_stream_382x288.ogv | \
    oggfwd icecastserver.com 8000 password /mountpoint.ogv
done

Uma das razões pelas quais estou perguntando isso é que eu preciso ter arquivos dv limpos e arquivos ogv no disco, independentemente de a rede estar ativa e o servidor de streaming icecast acessível.

    
por Nova deViator 11.12.2011 / 14:57

1 resposta

1

Você provavelmente pode fazer isso com arquivos comuns se não precisar de nenhuma simultaneidade. O princípio para pipes nomeados é o mesmo

Alterar

foo | \
bar | \
baz

Para

foo > foo.out
bar < foo.out > bar.out
baz < bar.out

Se o * .out é chamado de pipe, suspeito que os programas que o escrevem podem ficar bloqueados esperando que seus buffers de saída sejam drenados.

    
por 11.12.2011 / 15:52