我正在以非常慢的速度(每秒1帧)将帧传输到FFmpeg中,我希望以非常低的延迟将它们流出来。
不仅有来源(例如here和here)没有提到我需要将GOP大小(keyint
)设置为较小的值,但是是偶数来源(例如here和here)明确表示我不必须将GOP大小设置为较小的值。
然而,到目前为止,我发现减少真正长启动延迟的唯一方法是将GOP大小实际减少到1。
无论如何,这是我当前的命令行:
ffmpeg -f image2pipe
-probesize 32
-i -
-c:v libx264
-preset veryfast
-crf 23
-vsync 2
-movflags "frag_keyframe+empty_moov"
-profile baseline
-x264-params "intra-refresh=1"
-tune zerolatency
-f mp4
-
(我也尝试将:bframes=0:force-ctr:no-mbtree:sync-lookahead=0:sliced-threads:rc-lookahead=0
添加到-x264-params
(-tune zerolatency
应该做什么),因为其中一些值没有出现在调试输出中,但正如预期的那样没有效果。)
正如你在这里看到的,我们已经有182帧(= 3分钟挂钟)进入流中,但它仍然没有发出任何东西(大小从一开始就是1kB)。
frame= 182 fps=1.0 q=20.0 size= 1kB time=00:00:07.24 bitrate= 0.8kbits/s speed=0.0402x
This实际上谈到了第一张照片的时间,但这似乎并不是什么大问题。 ;)这对我来说,也许我必须让第一个GOP 1帧长,然后我可以切换到更长的GOP? FFmpeg能做到吗?
答案 0 :(得分:0)
添加-force_key_frames expr:eq(n,1)
会在第2帧强制使用KF。
由于您的费率是1 fps,我建议使用lt(n,5)
的expr。此外,默认keyint为250
,min-keyint为40
。因此,如果您想离开并重新加入流,可能需要很长时间才能重新启动。考虑减少keyint。