了解使用 ffmpeg 将 rtmp 输入发送到 node.js 脚本的脚本
Understanding a script which uses ffmpeg to send rtmp input to node.js script
我试图理解 this shell 脚本,它使用 ffmpeg 获取 rtmp 输入流并将其发送到 node.js 脚本。但我无法理解语法。这是怎么回事?
脚本:
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 发送音频流?
feed_time
变量表示 ffprobe
命令的标准输出。此值需要传递给 node
脚本。
-
字符在 bash 中没有特殊含义,即由 ffmpeg
命令本身解释(参见 here). According to ffmpeg
docs:
A - character before the stream identifier creates a "negative"
mapping. It disables matching streams from already created mappings.
2>/dev/null
是一种重定向,它将 ffmpeg
命令的标准错误输出发送到 /dev/null
设备,从而有效地丢弃错误输出(参见 here)。这样做是因为您只想将标准输出(不是错误输出)传递给 node
脚本。
|
是一个管道。它将 ffmpeg
命令的标准输出发送到 node
脚本的标准输入。
sleep
只是延迟脚本的执行。
我试图理解 this shell 脚本,它使用 ffmpeg 获取 rtmp 输入流并将其发送到 node.js 脚本。但我无法理解语法。这是怎么回事?
脚本:
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 发送音频流?
feed_time
变量表示ffprobe
命令的标准输出。此值需要传递给node
脚本。-
字符在 bash 中没有特殊含义,即由ffmpeg
命令本身解释(参见 here). According toffmpeg
docs:
A - character before the stream identifier creates a "negative" mapping. It disables matching streams from already created mappings.
2>/dev/null
是一种重定向,它将ffmpeg
命令的标准错误输出发送到/dev/null
设备,从而有效地丢弃错误输出(参见 here)。这样做是因为您只想将标准输出(不是错误输出)传递给node
脚本。|
是一个管道。它将ffmpeg
命令的标准输出发送到node
脚本的标准输入。sleep
只是延迟脚本的执行。