You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg实现RTMP流叠加PNG幻灯片并输出RTMP流的问题求助

问题解决与实现方案

一、修复当前命令错误

你遇到的错误是因为同时对同一个输出流使用了-vf和-filter_complex,FFmpeg不允许这种操作。需要将scale滤镜整合到filter_complex的处理链中,修改后的单图片叠加命令如下:

exec_static /usr/bin/ffmpeg -i "rtmp://urltortmp" -i 1.png -filter_complex "[0:v]scale=1280:trunc(ow/a/2)*2[vscaled];[vscaled][1:v]overlay=10:main_h-overlay_h-10[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a aac -b:v 1920k -b:a 64k -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/live/std 2>>/var/log/nginx/ffmpeg-std.log;

关键修改说明

  • 将主视频流[0:v]先执行scale缩放,生成新的视频流[vscaled]
  • 用缩放后的流与图片流[1:v]执行overlay叠加,生成最终输出流[vout]
  • 通过-map "[vout]"指定输出视频流,-map 0:a映射原RTMP流的音频,避免丢失音频

二、实现多PNG幻灯片轮播效果

假设你有按数字命名的图片(如1.png、2.png、3.png),要实现每张图片显示5秒、无限循环轮播的效果,命令如下:

exec_static /usr/bin/ffmpeg -i "rtmp://urltortmp" -f image2 -framerate 1/5 -i %d.png -filter_complex "[1:v]loop=loop=-1:size=3[vslides];[0:v]scale=1280:trunc(ow/a/2)*2[vscaled];[vscaled][vslides]overlay=10:main_h-overlay_h-10[vout]" -map "[vout]" -map 0:a -c:v libx264 -c:a aac -b:v 1920k -b:a 64k -tune zerolatency -preset superfast -crf 23 -f flv rtmp://localhost:1935/live/std 2>>/var/log/nginx/ffmpeg-std.log;

参数说明

  • -f image2 -framerate 1/5 -i %d.png:按数字序列读取图片,1/5表示每张图片显示5秒(每秒1/5帧)
  • [1:v]loop=loop=-1:size=3[vslides]:将图片流无限循环(loop=-1),size=3对应图片总数(如果有5张就改成5)
  • 如果图片尺寸不一致,可在图片流处理中加入统一缩放:[1:v]scale=300:45,loop=loop=-1:size=3[vslides](将所有图片缩放到300x45)

三、额外注意事项

  • 确保所有PNG图片的路径正确,若图片不在当前执行目录,需写全路径(如/path/to/images/%d.png)
  • 如果出现颜色异常,可在图片流中加入格式转换滤镜:[1:v]format=yuv420p,loop=loop=-1:size=3[vslides],统一像素格式与主视频匹配

内容的提问来源于stack exchange,提问作者anders larsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:45:41