PTS обозначает метки времени представления. См. Что такое временная шкала видео, временная база или временная метка в ffmpeg?
Фильтр setpts оценивает выражение и назначает значение в качестве временной метки для текущего кадра, который он обрабатывает
Например, setpts=2*N+5/TB
, где N - это индекс кадра, начиная с 0, а TB - это временная база потока. Скажем, это 1/1000, поэтому каждая единица PTS равна 1 миллисекунде.
Таким образом, для каждого кадра это будет выглядеть следующим образом:
N expression New PTS New PTS time
0 2*0+5/(1/1000) 5000 5.000 sec
1 2*1+5/(1/1000) 5002 5.002 sec
2 2*2+5/(1/1000) 5004 5.004 sec
...
Фильтры, которые работают с синхронизацией нескольких входовпо метке времени, то есть в оверлейном фильтре, фильтр наложит оверлейный вход с меткой времени 5.0 на основной вход с временем PTS 5.0. Если потоки имеют разные начальные PTS, это может привести к неожиданному выводу, поэтому временные метки сбрасываются, поэтому каждый поток начинается с 0. Конечно, если вы имеете в виду пользовательскую синхронизацию, вы должны соответствующим образом изменить выражение setpts.
Другая причина состоит в том, что когда поток имеет ненулевую начальную временную метку, ffmpeg может дублировать кадры в режиме -vsync cfr
, чтобы заполнить пробел от временной метки 0 до этой начальной временной метки. Это относится только к нескольким сценариям.