Puncte:1

Cum pot canaliza ieșirea FFMPEG 2 Levels of Piping într-un script bash

drapel cn

Am încercat să țin 2 niveluri adânc.

Pot conducta cu succes:

  1. ffmpeg | grep
  2. ffmpeg | sed

Nu pot țeapă

  1. ffmpeg | grep | sed
  2. ffmpeg | sed | grep

Nu înțeleg, ffmpeg se limitează la o singură țeavă în lanț?

Acest cod nu are IEȘIRE cu 2 conducte și fără erori:

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/.*durata_tăcerii: \(.*\).*/\1/"

Rezultat așteptat:

2.06442
0.719252
0.594036
0.562698
0.500295

Acest cod are ieșirea corectă cu 1 conductă:

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

Ieșire:

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

Acest cod are ieșirea corectă cu 1 conductă:

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

Ieșire:

[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
Puncte:3
drapel jp

De ce este grep | sed nu fac nimic?

Este, dar nu ai așteptat-o. Dacă apăsați q apoi ffmpeg va închide fluxul tăcere_durată valorile vor fi afișate.

Dacă doriți să imprime valorile imediat, o metodă este să utilizați awk in schimb.

Cum să izolați tăcere_durată valori?

Dacă scopul final este izolarea tăcere_durată utilizarea valorilor 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/ {printează $3}'

Rezultat:

2.06442
0.719252
0.594036
0.562698
0.663968
1.24109

Cu toate acestea, prefer să folosesc (a) metadate filtru cu filtre care acceptă chei de metadate. Este mai complicat, dar rezultatul este mai curat și mai ușor de analizat. Puteți fie direcționat cu ușurință informațiile (fisier=-) sau ieșire direct într-un fișier (fișier=liniște.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/ {printează $2}'
Jim Dandy BOA avatar
drapel cn
Mulțumesc mult! Acest lucru a fost de mare ajutor pentru mine, am luat codul dvs. și l-am modificat pentru a fi atașat la un fișier silence.log cu o ușoară variație: 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/ {printează $2 >> "silence.log"}'
llogan avatar
drapel jp
@JimDandyBOA Luați în considerare eliminarea `-t 30` dacă doriți să procesați mai mult de 30 de secunde. Am uitat să elimin asta din răspuns inițial.
Jim Dandy BOA avatar
drapel cn
Întâmplător, înainte de a adăuga -t 30, am adăugat exact același lucru cu o seară înainte pentru a forța scrierea într-un fișier de ieșire, deoarece awk tamponează ieșirea în fișier, dar nu tamponează ecranul terminalului. Intențiile mele au fost să apelez FFmpeg într-o buclă while ca un hack. Această metodă a funcționat, dar a deschis o cutie de viermi cu deschideri și închideri repetate. Ei bine, am învățat multe și sper că această postare este utilă altora. Multumesc din nou

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.