使用ffmpeg将0-100.jpg序列帧合成视频时读取顺序错误如何解决
ffmpeg顺序读取非补零数字命名图片序列的解决方案
乱序原因
你当前使用的glob通配符模式默认按照系统字典序排序,非补零命名的数字序列会出现10.jpg排在2.jpg之前的问题,最终导致帧顺序错乱。
推荐调整方案
方案1:使用ffmpeg原生序列匹配模式(最适合你的场景)
直接替换输入参数即可,ffmpeg会自动按整数递增顺序读取文件,无需额外处理:
ffmpeg -framerate 25 -start_number 0 -i "/home/ubuntu/17/1_1/%d.jpg" /home/ubuntu/17_a.avi
参数说明:
-start_number 0:指定图片序列的起始编号为0%d:自动匹配连续递增的整数编号,会按0、1、2……100的顺序读取文件
方案2:使用文件列表模式(适合序列不连续的场景)
如果你需要保留glob的匹配逻辑,可先按数字顺序生成文件列表,再喂给ffmpeg:
ls -1 /home/ubuntu/17/1_1/*.jpg | sort -n | sed 's/^/file /' > file_list.txt && ffmpeg -framerate 25 -f concat -safe 0 -i file_list.txt /home/ubuntu/17_a.avi
执行完成后可手动删除生成的file_list.txt临时文件。
优化建议
后续生成图片序列时建议使用补零命名(如000.jpg、001.jpg……100.jpg),任意工具的默认排序都不会出现乱序问题,匹配时使用%03d.jpg即可。
内容的提问来源于stack exchange,提问作者shailza
相关产品推荐
相关产品推荐

