Я считаю, что проблема с временными метками заключается в том, что когда видео содержит B-кадры (с двунаправленным предсказанием), кадры появляются в битовом потоке вне их порядка отображения. Из-за этого вы должны проявлять особую осторожность при определении PTS декодированного кадра. Взгляните на эту страницу хорошего учебника ffmpeg и посмотрите, как они справляются с этой проблемой.
По сути, вам нужно сохранить значение PTS первого пакета для каждого декодированного кадра. Значение PTS в структуре AVFrame после декодирования недопустимо.
Что касается вопросов качества, это может или не может быть связано с проблемами с отметками времени, но я могу заверить вас, что проблема почти наверняка не в самих библиотеках ffmpeg, поскольку они широко используются и могут даже использоваться как backend от VLC при декодировании вашего видео.
Я бы посмотрел на учебник и реализовал вещи в точности так, как это просто, чтобы посмотреть, сможете ли вы заставить его работать, а затем измените код учебника в соответствии с вашими потребностями.