Я уверен, что вы получаете точные значения. Это может помочь, если вы используете поток MPEG, а также поток. В этом случае перед IBBPBB, который вы видите, обычно будет другой GOP. Может быть, что-то вроде этого (используя ту же нотацию, что и исходный вопрос):
P(-3,-2) B(-2,-1) B(-1,0)
В основном B-кадры после I-фреймов основаны на I-кадре и последнем P-кадре с предыдущей GOP.
Хотя логический смысл для видео начинается с этого:
Start GOP: IPBBPBBPBB...
Позже это должно быть
Start GOP: IBBPBBPBBPBB
Start GOP: IBBPBBPBBPBB
Start GOP: IBB...
Помните, что для декодирования любого кадра B требуется полный кадр перед ним и после него. Поэтому каждая пара кадров B должна отображаться перед кадром I или P непосредственно перед ним в файле.
FFMPEG может просто отказаться от «специального случая» первой GOP.
Поскольку первые два кадра B не имеют предыдущего кадра для управления, вы должны быть в состоянии безопасно отбросить их. Просто переустановите временные метки с первого кадра I и отрегулируйте аудиопоток равной суммы.
Будет ли это фактически приводить к потере кадров, будет зависеть от реализации FFMPEG, но худший сценарий заключается в том, что вы теряете 83 миллисекунды (2 кадра со скоростью 24 кадра/сек).