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

标签 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 \
        &

附言
我知道,我可以在网站上制作 youtube 流媒体小部件,并仅使用 html/css/js 将分数放在上面。但不幸的是,它必须直接在视频流中完成。

P.P.S
我知道,我可以使用 ffmpeg drawtext。但这不是我想要的。我有专门设计的 png,它必须尽可能频繁地更新(1-2 秒一次就好了)

最佳答案

三件事:

1) -re每个输入都应用,因此 ffmpeg 当前正在以相对于视频异步的速率读取您的图像。由于视频是实时读取的,图像阅读器将循环图像的数据包排队,直到过滤器图可以使用它们。因此,更新后的图像将被消耗得更晚,并且分配的时间戳比实际更新时更大。添加 -re图片前-i纠正这一点。

2) 跳过-loop 1并使用 -stream_loop -1因为如果在尝试读取输入时输入被阻塞或为空(由于更新),image2 解复用器可能会中止。虽然,由于输入是通过网络协议(protocol)读取的,这对您来说可能不是问题。

3) 您在输出选项中没有指定编码器。由于格式是MPEG-TS,ffmpeg会选择mpeg2video默认比特率为 200 kbps。 ultrafast预设不适用于此编码器。您可能想添加 -c:v libx264 .

关于ffmpeg - 如何强制 ffmpeg 更频繁地刷新覆盖图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55876001/

相关文章:

animation - FFmpeg,动画类型 : How to move the video screen along the large images?

linux - 将值解析为 Shell Bash 脚本

ios - Html5 视频播放器未自动恢复

ios - png 文件显示在模拟器上,但不显示在 ipad 上

ffmpeg - 如何在制作 gif FFMPEG WEBM TO GIF 之前覆盖帧

php - cPanel - 通过easyapache安装模块会覆盖php.ini吗?

image - 在静态图像上叠加音频音量直方图

java - 从 Android 应用程序中的 protected 目录流式传输视频

Azure blob 流视频 - ASP.NET MVC

java - 类似于 TinyPNG for Java 的库 - 压缩图像大小