Làm thế nào để chuyển đổi một tập lệnh bằng cách sử dụng các đường ống thành các ống được đặt tên


2

Tôi có một tập lệnh bash đang sử dụng các đường dẫn ẩn danh để đạt được:

  • lấy video từ thiết bị quay dv
  • ghi vào một tập tin (sử dụng tee)
  • chuyển nó sang ffmpeg2theora (chuyển đổi sang video ogv / theora)
  • ghi vào một tập tin (sử dụng tee)
  • dẫn nó đến oggfwd để gửi nó đến máy chủ phát trực tuyến icecast

Làm thế nào tôi có thể đạt được điều đó bằng cách sử dụng các đường ống có tên (fifos), để tôi có thể có các quy trình riêng biệt mà tôi có thể kiểm soát riêng?

Tôi đã sử dụng tập lệnh này:

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

Một trong những lý do tôi hỏi điều này là tôi cần phải có các tệp dv và tệp ogv sạch trên đĩa bất kể mạng có hoạt động hay không và máy chủ phát trực tuyến icecast có thể truy cập được.

Câu trả lời:


1

Bạn có thể có thể làm điều này với các tệp thông thường nếu bạn không cần bất kỳ sự tương tranh nào cả. Nguyên tắc cho các ống được đặt tên là giống nhau

Thay đổi

foo | \
bar | \
baz

Đến

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

Nếu * .out được đặt tên là pipe thì tôi nghi ngờ các chương trình ghi vào chúng có thể bị chặn chờ cho bộ đệm đầu ra của chúng bị thoát.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.