我正在尝试使用ffmpeg进行体育直播。正在从服务器获取流匹配的分数并转换为png。此png必须出现在视频的顶部。
ffmpeg允许使用image2 demuxer在视频流上叠加。如果我使用-loop1,则此叠加大约每5秒更新一次。如何强制ffmpeg更频繁地从磁盘读取它?
我目前尝试在5秒内完成叠加更新(mp4视频用于测试目的):
nice -n -19 ffmpeg \
-re -y \
-i s.mp4 \
-f image2 -loop 1 -i http://127.0.0.1:3000/img \
-filter_complex "[0:v][1:v]overlay" \
-threads 4 \
-v 0 -f mpegts -preset ultrafast udp://127.0.0.1:23000 \
&
P.S我知道,我可以在网站上制作youtube流媒体小部件,并使用html / css / js将评分放在其上。但不幸的是,它必须直接在视频流中完成。
P.P.S我知道,我可以使用ffmpeg drawtext。但这不是我想要的。我有专门设计的png,必须尽可能频繁地更新(1-2秒内一次就会很棒)
三件事:
1)每个输入应用-re
,因此ffmpeg当前正以与视频异步的速率读取图像。由于视频是实时读取的,因此图像读取器将循环图像的数据包排队,直到滤波器图形可以消耗它们。因此,更新后的图像将消耗得更晚,并且分配的时间戳比实际更新时更长。在图像-re
之前添加-i
来纠正这个问题。
2)跳过-loop 1
并使用-stream_loop -1
,因为如果输入被阻止或者在尝试读取时由于更新而导致image2解复用器可以中止。虽然,由于输入是通过网络协议读取的,因此这对您来说可能不是问题。
3)您在输出选项中未指定编码器。由于格式为MPEG-TS,因此ffmpeg将选择mpeg2video
,默认比特率为200 kbps。 ultrafast
预设不适用于此编码器。你可能想添加-c:v libx264
。
我发现,将image2的帧速率值增加到90-100会使文件读取过程更快,但音频会受到限制