FFmpeg hstack拼接切片图片报错,请求技术排查协助
问题原因与解决方案
核心问题:concat demuxer的使用场景错误
你用-f concat的concat demuxer,作用是把多个文件串联成单个连续的媒体流(比如把多张图片做成一段视频),而非生成多个独立的视频输入源。所以不管你的文本里写多少个file,ffmpeg只会识别出1个输入流(索引为0),自然找不到[1:v]这类其他输入,导致hstack滤镜无法获取足够的输入源报错。
正确的实现方式
1. 测试用(2个切片)
直接将每个切片作为独立输入传给ffmpeg,无需concat文本:
ffmpeg -i img1920_slices/img1920_slice_0.png -i img1919_slices/img1919_slice_0.png -filter_complex "[0:v][1:v]hstack=inputs=2" test.png
2. 批量处理1920个切片
用Shell脚本自动生成所有输入参数和hstack的输入标签:
# 生成所有切片的输入参数(按img1920到img0001的顺序) input_args="" for num in $(seq 1920 -1 1); do formatted_num=$(printf "%04d" $num) input_args="$input_args -i img${formatted_num}_slices/img${formatted_num}_slice_0.png" done # 生成hstack需要的输入标签串(如[0:v][1:v]...[1919:v]) filter_inputs=$(seq 0 1919 | awk '{print "["$0":v]"}' | tr -d '\n') # 执行拼接命令 ffmpeg $input_args -filter_complex "${filter_inputs}hstack=inputs=1920" reconstructed_slice_0.png
补充说明
- hstack的
inputs参数必须和实际传入的视频输入数量完全一致,否则会报错 - 1920个输入可能会占用较多内存,若出现内存不足问题,可以考虑分批次拼接(比如先每100个拼成一张图,再把这些拼接后的图继续横向拼接)
内容的提问来源于stack exchange,提问作者Elle Fiorentino-Lange
相关产品推荐
相关产品推荐

