FFmpeg实现直播中定时循环切换Logo叠加层的方法
实现直播流中每20秒自动切换Logo的FFmpeg方案
我来帮你调整FFmpeg命令,实现每20秒自动循环切换Logo的效果~先看你当前的命令已经有了定时显示Logo的基础,咱们只需要修改时间判断逻辑就能达成需求。
调整后的完整命令
ffmpeg -re -i "https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8" -i ./public/images/ACE.png -i ./public/images/logo2.jpg -i ./public/images/crunchy.png -i ./public/images/red.jpg -filter_complex \ "[0]scale=1290:720,setsar=1[ovrl0]; \ [1]scale=40:40[ovrl1]; \ [2]scale=40:40[ovrl2]; \ [3]scale=40:40[ovrl3]; \ [4]scale=40:40[ovrl4]; \ [ovrl0][ovrl1] overlay=x=(main_w-overlay_w)/1.025:y=(main_h-overlay_h)/18:enable='lt(mod(t,80),20)'[v1]; \ [v1][ovrl2] overlay=x=(main_w-overlay_w)/1.025:y=(main_h-overlay_h)/18:enable='between(mod(t,80),20,40)'[v2]; \ [v2][ovrl3] overlay=x=(main_w-overlay_w)/1.025:y=(main_h-overlay_h)/18:enable='between(mod(t,80),40,60)'[v3]; \ [v3][ovrl4] overlay=x=(main_w-overlay_w)/1.025:y=(main_h-overlay_h)/18:enable='gt(mod(t,80),60)'" -acodec aac -vcodec libx264 -f flv "rtmp://a.rtmp.youtube.com/live2/2222-2222-2222-2222"
关键逻辑说明
- 循环周期设置:你准备了4个Logo,要每20秒切换一次,所以把总循环周期设为
80秒(4×20)。通过mod(t,80)计算当前时间在80秒周期内的位置,给每个Logo分配专属的20秒显示窗口:- 第一个Logo(ACE.png):
lt(mod(t,80),20)—— 周期前20秒显示 - 第二个Logo(logo2.jpg):
between(mod(t,80),20,40)—— 第20-40秒显示 - 第三个Logo(crunchy.png):
between(mod(t,80),40,60)—— 第40-60秒显示 - 第四个Logo(red.jpg):
gt(mod(t,80),60)—— 第60-80秒显示,之后自动循环回第一个
- 第一个Logo(ACE.png):
- 位置一致性:所有
overlay的x/y参数和你原命令保持一致,确保切换时Logo位置不偏移,视觉上更连贯。
简化版:仅两个Logo交替切换
如果你只需要两个Logo每20秒交替显示,可简化命令,把周期改成40秒:
ffmpeg -re -i "https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8" -i ./public/images/ACE.png -i ./public/images/logo2.jpg -filter_complex \ "[0]scale=1290:720,setsar=1[ovrl0]; \ [1]scale=40:40[ovrl1]; \ [2]scale=40:40[ovrl2]; \ [ovrl0][ovrl1] overlay=x=(main_w-overlay_w)/1.025:y=(main_h-overlay_h)/18:enable='lt(mod(t,40),20)'[v1]; \ [v1][ovrl2] overlay=x=(main_w-overlay_w)/1.025:y=(main_h-overlay_h)/18:enable='gt(mod(t,40),20)'" -acodec aac -vcodec libx264 -f flv "rtmp://a.rtmp.youtube.com/live2/2222-2222-2222-2222"
测试时可以把20秒改成5秒,快速验证切换逻辑是否正常哦~
内容的提问来源于stack exchange,提问作者Ricky
相关产品推荐
相关产品推荐

