我一直在尝试铺设两层深度的管道。
我可以成功管道:
- ffmpeg | grep
- ffmpeg | sed
我不会吹管
- ffmpeg | grep | sed
- ffmpeg | sed | grep
我不明白,ffmpeg 是否限制链中只有一个管道?
此代码有 2 个管道且无错误,但没有输出:
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/"
预期输出:
2.06442
0.719252
0.594036
0.562698
0.500295
此代码使用 1 个管道具有正确的输出:
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
输出:
[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
此代码使用 1 个管道具有正确的输出:
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/"
输出:
[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
答案1
为什么grep | sed
什么也不做?
是的,但你没有等待它。如果你按下,qffmpeg 将关闭流,silence_duration
值将显示出来。
如果您希望它立即打印值,awk
则可以使用一种方法。
如何隔离silence_duration
值?
如果最终目标是隔离silence_duration
值使用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/ {print $3}'
结果:
2.06442
0.719252
0.594036
0.562698
0.663968
1.24109
不过,我更喜欢使用(a)元数据使用支持元数据键的过滤器进行过滤。它更复杂,但输出更清晰,更容易解析。您可以轻松地通过管道传输信息(file=-
)或直接输出到文件(file=silence.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/ {print $2}'