我正在尝试使用ffmpeg进行体育直播。正在从服务器获取流式匹配的分数并将其转换为png。此png必须出现在视频顶部。
ffmpeg允许使用image2多路分配器在视频流上放置覆盖。如果使用-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秒内一次就很好了)
答案 0 :(得分:1)
三件事:
1)-re
应用于每个输入,因此ffmpeg当前正在以相对于视频异步的速率读取图像。由于视频是实时读取的,因此图像读取器会将循环图像的数据包排入队列,直到过滤器图可以使用它们为止。因此,与实际更新相比,更新后的图像将消耗得更晚,并且分配的时间戳也更大。在图像-re
之前添加-i
,以纠正这一问题。
2)跳过-loop 1
并使用-stream_loop -1
,因为在尝试读取输入时,如果输入被阻止或为空(由于更新),image2多路分配器可能会中止。虽然,由于输入是通过网络协议读取的,所以这对您来说可能不是问题。
3)您没有在输出选项中指定编码器。由于格式为MPEG-TS,ffmpeg将选择mpeg2video
,默认比特率为200 kbps。 ultrafast
预设不适用于此编码器。您可能要添加-c:v libx264
。
答案 1 :(得分:0)
我发现,将image2的帧速率值提高到90-100可以使文件读取过程更快,但是音频会受到限制