如何强制ffmpeg更频繁地刷新覆盖图像?

时间:2019-04-26 23:34:09

标签: ffmpeg video-streaming png overlay

我正在尝试使用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秒内一次就很好了)

2 个答案:

答案 0 :(得分:1)

三件事:

1)-re应用于每个输入,因此ffm​​peg当前正在以相对于视频异步的速率读取图像。由于视频是实时读取的,因此图像读取器会将循环图像的数据包排入队列,直到过滤器图可以使用它们为止。因此,与实际更新相比,更新后的图像将消耗得更晚,并且分配的时间戳也更大。在图像-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可以使文件读取过程更快,但是音频会受到限制

相关问题