как конвертировать скрипт с использованием конвейеров в именованные каналы

584
Nova deViator

У меня есть сценарий Bash, который использует анонимные каналы для достижения:

  • захват видео с устройства захвата DV
  • запись в файл (используя тройник)
  • передача его в ffmpeg2theora (преобразование в видео ogv / theora)
  • запись в файл (используя тройник)
  • передача его в oggfwd для отправки на потоковый сервер icecast

Как я могу добиться этого, используя именованные каналы (fifos), чтобы у меня были отдельные процессы, которыми я мог бы управлять отдельно?

Я использовал этот скрипт:

 #!/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 

Одна из причин, по которой я спрашиваю это, заключается в том, что мне нужно иметь чистые dv-файлы и ogv-файлы на диске независимо от того, работает ли сеть и доступен ли сервер потоковой передачи icecast.

2

1 ответ на вопрос

1
RedGrittyBrick

Вероятно, вы можете сделать это с обычными файлами, если вам вообще не нужен параллелизм. Принцип для именованных труб тот же

+ Изменить

foo | \ bar | \ baz 

к

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

Если * .out являются именованными каналами, я подозреваю, что программы, которые пишут в них, могут быть заблокированы в ожидании очистки их выходных буферов.

Похожие вопросы