使用FFmpeg filter_complex缩放视频并叠加时出现滤镜解析错误
FFmpeg滤镜图解析错误修复
问题场景
需要将RTMP输入视频(2304x1296)缩放到1920x1080,同时叠加循环播放的本地视频slider.mp4,执行以下命令时出现错误:
exec_static /usr/bin/ffmpeg -threads 1 -i "rtmp://url" -stream_loop -1 -i /slider.mp4 -filter_complex "[0:v]scale=1920:1080[1:v] overlay=20:main_h-overlay_h-80" -c:v h264 -c:a aac -b:v 1980k -b:a 64k -an -tune zerolatency -preset ultrafast -f flv rtmp://localhost:1935/live/std 2>>/var/log/nginx/ffmpeg-std.log;
错误信息
[AVFilterGraph @ 0x556874510700] Unable to parse graph description substring: "overlay=20:main_h-overlay_h-80"
Error initializing complex filters.
输入视频信息
Input #0, flv, from 'rtmp://url':
Metadata:
displayWidth : 2304
displayHeight : 1296
Duration: 00:00:00.00, start: 53669.778000, bitrate: N/A
Stream #0:0: Data: none
Stream #0:1: Video: h264 (Baseline), yuv420p(progressive), 2304x1296, 12 fps, 12 tbr, 1k tbn
Stream #0:2: Audio: aac (LC), 16000 Hz, mono, fltp
错误原因与修复
错误点
- 滤镜标签冲突:将缩放后的视频标签设为
[1:v],但该标签已被第二个输入文件(/slider.mp4)的视频流占用,导致overlay滤镜无法识别正确输入源。 - 滤镜链语法错误:scale滤镜的输出未正确与overlay滤镜关联,缺少必要的连接语法。
修正后的命令
exec_static /usr/bin/ffmpeg -threads 1 -i "rtmp://url" -stream_loop -1 -i /slider.mp4 -filter_complex "[0:v]scale=1920:1080[scaled_v];[scaled_v][1:v]overlay=20:main_h-overlay_h-80" -c:v h264 -b:v 1980k -an -tune zerolatency -preset ultrafast -f flv rtmp://localhost:1935/live/std 2>>/var/log/nginx/ffmpeg-std.log;
说明
- 将scale滤镜的输出标签改为
[scaled_v],避免与输入1的视频流标签冲突。 - 用分号分隔滤镜节点,明确scale和overlay的执行顺序,同时将
[scaled_v](缩放后的主视频)和[1:v](循环的overlay视频)作为overlay滤镜的两个输入,确保滤镜图解析正确。 - 移除冗余的
-c:a aac -b:a 64k参数,因为-an已禁用音频输出,这些参数不会生效。
内容的提问来源于stack exchange,提问作者anders larsson
相关产品推荐
相关产品推荐

