В дополнение к методу множественных инструментов, показанному на https://stackoverflow.com/q/28086775/5726027, его можно также выполнить с помощью одной длинной команды.
ffmpeg -i a1.jpg -i a2.jpg -i a3.jpg -i a4.jpg -i a5.jpg -filter_complex "[1]settb=1/1000,setpts=PTS+0.06/TB[b]; [2]settb=1/1000,setpts=PTS+0.054/TB[c]; [3]settb=1/1000,setpts=PTS+0.07/TB[d]; [4]split[4a][4b]; [4a]settb=1/1000,setpts=PTS+0.023/TB[e]; [4b]settb=1/1000,setpts=PTS+0.04/TB[f]; [0][b][c][d][e][f]concat=n=6" -vsync vfr -r 1000 -video_track_timescale 1000 vt.mp4
Для каждого изображения, кроме первого, применяются фильтры timebase и timestamp. Так как вам нужна точность в миллисекундах, временная база установлена на 1/1000 сек = 1 миллисекунда. Затем setpts добавляет требуемую задержку (в секундах). Поскольку я считаю, что самый последний кадр видео фактически имеет длительность по умолчанию, определяемую частотой кадров кодека, самое последнее изображение должно быть продублировано. Первая копия устанавливает значение PTS в соответствии с его задержкой, а вторая имеет свою PTS, установленную на предполагаемую длительность последнего изображения.