Điểm:1

Làm cách nào tôi có thể chuyển đầu ra của FFMPEG 2 Cấp độ đường ống trong tập lệnh bash

lá cờ cn

Tôi đã cố gắng đào sâu 2 cấp độ.

Tôi có thể đường ống thành công:

  1. ffmpeg | tiếng kêu
  2. ffmpeg | sed

tôi không thể đường ống

  1. ffmpeg | tiếng kêu | sed
  2. ffmpeg | sed | tiếng kêu

Tôi không hiểu, ffmpeg có giới hạn chỉ một đường ống trong chuỗi không?

Mã này KHÔNG CÓ ĐẦU RA với 2 đường ống và không có lỗi:

ffmpeg -i "https://17563.live.streamtheworld.com/WETAFM.mp3?nocache=Ag6q8pw2" -af silencedetect=n=-10dB:d=0.5 -f null - 2>&1 | grep silence_duration | sed "s/.*silence_duration: \(.*\).*/\1/"

Sản lượng dự kiến:

2.06442
0.719252
0.594036
0.562698
0.500295

Mã này có đầu ra chính xác với 1 đường ống:

ffmpeg -i "https://17563.live.streamtheworld.com/WETAFM.mp3?nocache=Ag6q8pw2" -af silencedetect=n=-10dB:d=0.5 -f null - 2>&1 | grep silence_duration

Đầu ra:

[silencedetect @ 0000018027f9bd00] silence_end: 2.06442 | silence_duration: 2.06442
[silencedetect @ 0000018027f9bd00] silence_end: 3.45971 | silence_duration: 0,719252
[silencedetect @ 0000018027f9bd00] silence_end: 7.04399 | silence_duration: 0,594036
[silencedetect @ 0000018027f9bd00] silence_end: 7.81501 | silence_duration: 0,562698
[silencedetect @ 0000018027f9bd00] silence_end: 9.05535 | silence_duration: 0,500295

Mã này có đầu ra chính xác với 1 đường ống:

ffmpeg -i "https://17563.live.streamtheworld.com/WETAFM.mp3?nocache=Ag6q8pw2" -af silencedetect=n=-10dB:d=0.5 -f null - 2>&1 | sed "s/.*silence_duration: \(.*\).*/\1/"

Đầu ra:

[silencedetect @ 000001a48277b980] silence_start: 0
2.06442
[silencedetect @ 000001a48277b980] silence_start: 2.74045
0,719252
[silencedetect @ 000001a48277b980] silence_start: 6.44995
0,594036
[silencedetect @ 000001a48277b980] silence_start: 7.25231
0,562698
[silencedetect @ 000001a48277b980] silence_start: 8.55506
0,500295
Điểm:3
lá cờ jp

Tại sao lại là tiếng kêu | sed đang không làm gì cả?

Đó là, nhưng bạn đã không chờ đợi cho nó. nếu bạn nhấn q sau đó ffmpeg sẽ đóng luồng im lặng_duration các giá trị sẽ được hiển thị.

Nếu bạn muốn nó in các giá trị ngay lập tức, một phương pháp là sử dụng awk thay thế.

Làm thế nào để cô lập im lặng_duration các giá trị?

Nếu mục tiêu cuối cùng là cô lập im lặng_duration giá trị sử dụng awk:

ffmpeg -i "https://17563.live.streamtheworld.com/WETAFM.mp3?nocache=Ag6q8pw2" -af silencedetect=n=-10dB:d=0.5 -f null - 2>&1 | awk -F ': ' '/silence_duration/ {in $3}'

Kết quả:

2.06442
0.719252
0.594036
0.562698
0.663968
1.24109

Tuy nhiên, tôi thích sử dụng (a) siêu dữ liệu lọc bằng các bộ lọc hỗ trợ khóa siêu dữ liệu. Nó phức tạp hơn, nhưng đầu ra sạch hơn và dễ phân tích cú pháp hơn. Bạn có thể dễ dàng chuyển thông tin (tệp = -) hoặc xuất trực tiếp ra tệp (tập tin = im lặng.log):

ffmpeg -loglevel error -i "https://17563.live.streamtheworld.com/WETAFM.mp3?nocache=Ag6q8pw2" -af silencedetect=n=-10dB:d=0.5,ametadata=mode=print:key=lavfi. silence_duration:file=- -f null - | awk -F = '/silence_duration/ {in $2}'
Jim Dandy BOA avatar
lá cờ cn
Cảm ơn bạn rất nhiều! Điều này đã giúp tôi rất nhiều, tôi đã lấy mã của bạn và sửa đổi nó để nối vào tệp silence.log với một biến thể nhỏ: ffmpeg -loglevel error -i "https://17563.live.streamtheworld.com/WETAFM. mp3?nocache=Ag6q8pw2" -af silencedetect=n=-10dB:d=0.5,ametadata=mode=print:key=lavfi.silence_duration:file=- -t 30 -f null - | awk -F = '/silence_duration/ {print $2 >> "silence.log"}'
llogan avatar
lá cờ jp
@JimDandyBOA Cân nhắc xóa `-t 30` nếu bạn muốn xử lý hơn 30 giây. Tôi quên xóa nó khỏi câu trả lời ban đầu.
Jim Dandy BOA avatar
lá cờ cn
Thật trùng hợp, trước khi bạn thêm -t 30, tôi đã thêm chính xác điều tương tự vào đêm hôm trước để buộc ghi vào tệp đầu ra vì awk đang đệm đầu ra vào tệp nhưng không đệm vào màn hình đầu cuối. Ý định của tôi là gọi FFmpeg trong vòng lặp while là một bản hack. Phương pháp này hiệu quả nhưng lại mở ra một hộp sâu bằng cách mở và đóng lặp đi lặp lại. Chà, tôi đã học được rất nhiều và hy vọng rằng bài đăng này hữu ích cho những người khác. Cảm ơn một lần nữa

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.