我試圖理解這個使用 ffmpeg 獲取 rtmp 輸入流并將其發送到 node.js 腳本的 shell 腳本。但我無法理解語法。這里發生了什么?
劇本:
while :
do
echo "Loop start"
feed_time=$(ffprobe -v error -show_entries format=start_time -of default=noprint_wrappers=1:nokey=1 $RTMP_INPUT)
printf "feed_time value: ${feed_time}"
if [ ! -z "${feed_time}" ]
then
ffmpeg -i $RTMP_INPUT -tune zerolatency -muxdelay 0 -af "afftdn=nf=-20, highpass=f=200, lowpass=f=3000" -vn -sn -dn -f wav -ar 16000 -ac 1 - 2>/dev/null | node src/transcribe.js $feed_time
else
echo "FFprobe returned null as a feed time."
fi
echo "Loop finish"
sleep 3
done
- 這是什么
feed_time?它代表什么? - 這部分在做什么
- 2>/dev/null | node src/transcribe.js $feed_time? - 有什么用
sleep 3?這是否意味著我們以 3 秒為單位向 node.js 發送音頻流?
uj5u.com熱心網友回復:
feed_time變數代表ffprobe命令的標準輸出。該值需要傳遞給node腳本。-字符在bash中沒有特殊含義,即由ffmpeg命令本身解釋(參見此處)。根據ffmpeg檔案:
流識別符號前的 - 字符創建“負”映射。它從已創建的映射中禁用匹配流。
2>/dev/null是一種將ffmpeg命令的標準錯誤輸出發送到/dev/null設備的重定向,從而有效地丟棄錯誤輸出(參見此處)。這樣做是因為您只希望將標準輸出(而不是錯誤輸出)傳遞給node腳本。|是一個管道。它將ffmpeg命令的標準輸出發送到node腳本的標準輸入。sleep只是延遲腳本的執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487315.html
