Давайте предположим, что у меня есть 5 изображений с соответствующими задержками между каждым изображением:
- 60мс;
- 54ms;
- 70ms;
- 23МС;
- 40мс;
Как я могу сообщить FFmpeg
эту информацию?
Давайте предположим, что у меня есть 5 изображений с соответствующими задержками между каждым изображением:
Как я могу сообщить FFmpeg
эту информацию?
В дополнение к методу множественных инструментов, показанному на 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, установленную на предполагаемую длительность последнего изображения.