2

У меня есть сценарий 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.

1 ответ1

1

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

+ Изменить

foo | \
bar | \
baz

к

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .