FFmpeg单命令实现8K转4K加侧边底部黑框得到T形视频报错如何解决
错误原因分析
- 第一条命令问题:
- 仅1个输入视频的情况下,
filter_complex中引用了不存在的流索引[1],单输入默认视频流索引为[0:v] - 滤镜链的流衔接语法错误,缩放后的输出流没有和后续
drawbox滤镜正确关联,属于filter_complex语法书写不规范
- 仅1个输入视频的情况下,
- 第二条命令问题:
-vf参数后的滤镜链中,scale=3840:2160,后面多了空格,FFmpeg 会把空格后的内容识别为独立的输入文件参数,自然无法解析为滤镜规则- 同时携带
-an(丢弃音频)和-c:a copy(复制音频)属于冗余冲突参数
正确可用命令
两种写法均可,按需选择:
写法1:用 -vf(单滤镜链更简洁,适合单输入单输出场景)
ffmpeg -i "8k.test.mp4" -preset slow -vcodec libx265 -crf 18 -movflags faststart -vf "scale=3840:2160,drawbox=w=384:h=1280:x=0:y=640:t=fill,drawbox=w=384:h=1280:x=3840-384:y=640:t=fill,drawbox=w=3840:h=300:x=0:y=2160-300:t=fill" -an output.mp4
写法2:用 -filter_complex(适合后续要扩展多滤镜链的场景)
ffmpeg -i "8k.test.mp4" -preset slow -vcodec libx265 -crf 18 -movflags faststart -filter_complex "[0:v]scale=3840:2160[scaled];[scaled]drawbox=w=384:h=1280:x=0:y=640:t=fill,drawbox=w=384:h=1280:x=3840-384:y=640:t=fill,drawbox=w=3840:h=300:x=0:y=2160-300:t=fill[out]" -map "[out]" -an output.mp4
补充说明
你用到的三个 drawbox 属于同一线性链,用逗号分隔完全符合官方规则,之前的报错都是语法书写不规范导致的,和滤镜分隔规则无关。滤镜参数整体用引号包裹可以避免空格被FFmpeg识别为参数分隔符,是最稳妥的书写习惯。
内容的提问来源于stack exchange,提问作者SteenPetersen
相关产品推荐
相关产品推荐

