如何用FFmpeg给视频指定区域加滚动歌曲名并推流至YouTube/Twitch
FFmpeg 直播推流与视频文本/滚动效果处理方案
一、给视频添加歌曲名称文本
使用FFmpeg的drawtext滤镜直接在视频帧上叠加文本,可自定义字体、位置、样式:
# 基础示例:固定位置显示歌曲名 drawtext=fontfile=你的字体文件.ttf:text='歌曲名称':x=100:y=100:fontsize=24:fontcolor=white:shadowcolor=black:shadowx=2:shadowy=2
若音频文件包含元数据,可自动读取歌曲名:
drawtext=fontfile=你的字体文件.ttf:text='%{metadata:title}':x=100:y=100:fontsize=24:fontcolor=white
二、特定区域+指定时间段的文本滚动
通过enable参数限制文本显示时间,结合坐标表达式实现仅在指定区域内滚动:
# 示例:第5-15秒内,在x=50到x=500的水平区域,文本从右向左滚动 drawtext=fontfile=你的字体文件.ttf:text='滚动歌词内容': x='if(gt(t,5), min(500, 500 - (t-5)*50), 500)': # 5秒后开始左移,到x=50边界停止 y=300:fontsize=24:fontcolor=white: enable='between(t,5,15)' # 仅在5-15秒生效
三、优化循环视频+多音频循环推流命令
你原命令中的-c copy属于冗余参数(后续对视频重新编码,该参数不生效),优化后命令更简洁可靠:
ffmpeg -re -stream_loop -1 -i back.gif \ -stream_loop -1 -safe 0 -i mylist.txt \ -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \ -pix_fmt yuv420p -g 50 \ -c:a aac -b:a 160k -ac 2 -ar 44100 \ -map 0:v:0 -map 1:a:0 \ -f flv rtmp://live.twitch.tv/app/$key
-stream_loop -1分别作用于视频和音频输入,实现两者无限循环-re按帧率读取输入,避免推流速度过快
四、整合滚动图片效果到推流命令
将滚动图片脚本与推流命令整合,调整滤镜循环逻辑适配无限推流:
ffmpeg -re -ignore_loop 0 -r 25 -i back.gif \ -loop 1 -r 25 -i input.jpg \ -stream_loop -1 -safe 0 -i mylist.txt \ -filter_complex "[0:v]crop=270:257:360:55[c0];[c0][1:v]overlay=y='257-t*257*0.04':eof_action=repeat[fg];[0:v][fg]overlay=x=360:y=55:eof_action=repeat[v_out]" \ -map "[v_out]" -map 2:a:0 \ -c:v libx264 -preset veryfast -b:v 3000k -maxrate 3000k -bufsize 6000k \ -pix_fmt yuv420p -g 50 \ -c:a aac -b:a 160k -ac 2 -ar 44100 \ -f flv rtmp://live.twitch.tv/app/$key
[0:v]crop=270:257:360:55[c0]:从背景视频裁剪出滚动区域遮罩overlay=y='257-t*257*0.04':控制图片从下往上滚动的速度eof_action=repeat:确保滤镜效果随视频循环持续生效
内容的提问来源于stack exchange,提问作者Youssef Lasheen
相关产品推荐
相关产品推荐

