Pphantom Есть режим просмотра и режим перемотки. Это два разных режима, которые работают по разному.
В режиме просмотр плейр не обязан показывает записанные кадры. У DirectX идёт позиционирование по таймеру. Поэтому кодек может показывать не записанные кадры, а результаты интерполяции. Но как правило кажет всё же записанные.
А при перемотке(когда вы ползунок мышкой трогаете) позиционирование идёт настолько кривым способом, что ни в сказке сказать не пером описать. Про настройку кодеков я писал, это справедливо для DirectX кодеков.
FFMpeg 2.хх версии умел позиционировать только по 100 мс. А FFMpeg 3.xx баг исправили. Но это на высоком уровне. А далее идёт низкий уровень и всё зависит от кодека.
Но насколько помню там тоже идёт позиционирование не к ближайшему кадру, а к B-фрейму.
Как результат имеем 4 возможных способа позиционирования которые наблюдаются в разных случаях.
1) Перематывает Либо к 0,1 секунде.
2) Либо к ключевым кадрам. Которые могут идти раз 5-15 секунд.
3) Либо к B-фреймам. Только там ещё 1-5 штук I-фреймов и один P-фреймы. Есть форматы у которых кадры I имеют неравномерные временные интервалы.
4)
А вот что-бы кто-то позиционирование к I кадрам я честно не припомню.
Хотя если брать древний кодек MPEG, то там в режиме перемотка идёт позиционирование по всем кадрам (в ту пору I-фреймы ещё не изобрели).
Правда на MSDN была отдельная статья именно про этот кодек и как обойти баг DirectX с потерю кадров при проигывание/обработке.
Можно и так. Только BMP-то зачем?
Что-бы двойной перекодировки не было.