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-то зачем?
Что-бы двойной перекодировки не было.