Давайте предположим, что у меня есть 5 изображений с соответствующими задержками между каждым изображением:

  1. 60мс;
  2. 54ms;
  3. 70ms;
  4. 23МС;
  5. 40мс;

Как я могу сообщить FFmpeg эту информацию?

1 ответ1

1

В дополнение к методу множественных инструментов, показанному на 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, установленную на предполагаемую длительность последнего изображения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .