【问题标题】:Update PNG overlay on video with ffmpeg使用 ffmpeg 更新视频上的 PNG 覆盖
【发布时间】:2016-12-13 23:30:10
【问题描述】:

我正在尝试制作视频的 RTMP 流并在其上放置一些图形数据。我有一个命令可以创建我需要的输出。唯一的问题是,尽管在渲染过程中 PNG 图像正在磁盘上更新,但在输出视频中,叠加层始终保持不变。我希望 ffmpeg 每次更改(或每分钟左右一次)时从磁盘获取 PNG 图像并将其用作叠加层。 这可能吗?

这是我用来渲染输出的命令:

ffmpeg \
-re -y \
-f lavfi \
-i "movie=filename=video/videobg.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" \
-loop 1 \
-i images/forecast.png \
-filter_complex "[1:v]format=argb,geq=r='r(X,Y)':a='0.9*alpha(X,Y)'[overlay]; [0:v][overlay]overlay" \
-i data/musicbg.mp3 \
-ac 1 \
-ar 44100 \
-b:a 128k \
-vcodec libx264 \
-pix_fmt yuv420p \
-r 30 \
-g 60 \
output.mp4

【问题讨论】:

  • 不可能。您可以尝试通过管道输入图像,即-f image2pipe -framerate 1/60 -i pipe:.png
  • 我不明白如何正确使用此选项。你能举个例子吗?

标签: video ffmpeg overlay


【解决方案1】:

嗯,我终于想出了如何制作我想要的东西。希望,这对其他人有用。

我唯一要做的就是为图像输入添加一个-f image2 选项。该命令与我上面发布的命令略有不同,因为我更改了输入源的顺序,但实际上它是相同的。 这是解决方案:

ffmpeg \
-re -y \
-loop 1 \
-f image2 \
-i images/forecast.png \
-f lavfi \
-i "movie=filename=video/videobg.mp4:loop=0, setpts=N/(FRAME_RATE*TB)" \
-filter_complex "[0:v]format=argb,geq=r='r(X,Y)':a='0.9*alpha(X,Y)'[overlay]; [1:v][overlay]overlay" \
-i data/musicbg.mp3 \
-ac 1 \
-ar 44100 \
-b:a 128k \
-vcodec libx264 \
-pix_fmt yuv420p \
-r 30 \
-g 60 \
output.mp4

【讨论】:

  • 很奇怪。我可以发誓单个图像的默认复用器也是 image2。原来它是 imageauto demuxer,它显示为 png_pipe 对于 PNG,但不是对于单个 JPG。很高兴知道。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2020-08-26
  • 2016-12-09
  • 2017-08-03
  • 1970-01-01
  • 2016-01-21
  • 2021-11-27
相关资源
最近更新 更多