ffmpeg rtmp 在 youtube 上的广播速度低于 1x

ffmpeg rtmp broadcast on youtube speed below 1x

我制作了一个 python 和 opencv 程序,每秒产生大约 8-15fps 的帧,输出格式为 MJPEG,其中 MJPEG 地址在本地主机网络服务器 (0.0.0.0:5000) 上提供,我确实尝试广播它的框架到 rtmp 服务器,比如使用 ffmpeg 的 youtube,所以基本上我确实将 MJEG 转换为 flv 并使用以下命令转发到 rtmp 服务器 ffmpeg -f mjpeg -i http://0.0.0.0:5000/video_feed -f lavfi -i anullsrc -c:v libx264 -vf "scale=trunc(oh*a/2)*2:320,unsharp=lx=3:ly=3:la=1.0" -crf 24 -c:a aac -ac 1 -f flv rtmp://a.rtmp.youtube.com/live2/xxx-xxx-xxx 但不幸的是 youtube 流有太多缓冲,每 5 秒左右发生一次,ffmpeg 终端告诉写作速度只有0.317x左右(预计与youtube同步0.99-1x左右),我的问题是

有没有办法以大约 8-15fps 的速度流式传输 'realtime' 并自动与 youtube rtmp 服务器同步而无需缓冲,因为我认为 youtube 需要大约 30fps 而我的 fps 只有 9-15fps,这可能会导致缓冲。 是否有类似额外的ffmpeg参数可以加快写入速度?谢谢

原始视频的帧率通常为 25。但您的来源是可变帧率。您需要将挂钟时间指定为时间戳并为 YT 生成恒定帧率输出。

ffmpeg -f mjpeg -use_wallclock_as_timestamps true -i http://0.0.0.0:5000/video_feed -f lavfi -re -i anullsrc -vsync cfr -r 25 -c:v libx264 -vf "scale=trunc(oh*a/2)*2:320,unsharp=lx=3:ly=3:la=1.0" -crf 24 -c:a aac -ac 1 -f flv rtmp://a.rtmp.youtube.com/live2/xxx-xxx-xxx