FFmpeg从RTSP流提取帧异常:每秒输出远超2帧的问题排查
FFmpeg处理RTSP流的两个问题解析
一、Node.js提取帧数量超标的原因及解决
你同时设置了-r 2(输入帧率)和-vf fps=2(滤镜降帧),但输入侧的-r参数不适用于RTSP流:
- RTSP是实时流,自带时间戳和固定帧率,强制用
-r 2会让FFmpeg错误地将原流的帧按2fps的节奏解码,人为拉长输入时间轴,导致后续的fps=2滤镜因时间戳混乱无法生效,反而输出大量重复帧。 - 正确做法是删除输入侧的
-r参数,仅保留-vf fps=2来控制每秒输出2帧。
示例Node.js spawn调用的正确参数数组:
[ "-i", "rtsp://your-stream-url", "-vf", "fps=2", "-f", "image2pipe", "-vcodec", "mjpeg", // 可选,也可替换为png "pipe:1" ]
二、终端生成视频慢动作的原因及解决
终端命令里的-r 2同样是错误设置:
- 给RTSP输入设置
-r 2后,FFmpeg会把原流所有帧按2fps的时长计算,比如原流是25fps,原本1秒的内容会被当成12.5秒处理,视频时长被强行拉长,播放自然呈现慢动作。 - 正确做法是去掉输入侧的
-r参数,若要控制输出视频帧率,在输出侧设置-r 2或保留-vf fps=2即可:
示例正确终端命令:
ffmpeg -i rtsp://your-stream-url -vf fps=2 -r 2 output.mp4
这样FFmpeg会按原流实际帧率解码,再通过滤镜将输出帧率降到2fps,生成的视频时长正常,不会出现慢动作。
内容的提问来源于stack exchange,提问作者distante
相关产品推荐
相关产品推荐

