У меня есть так называемый «блок», в котором хранятся некоторые из кадров MPEG4 (I, p, p, p, p ...). Для каждого «блока» кадр начинается с кадра «I» и заканчивается перед следующим кадром «I». (VOL - «visual_object_sequence_start_code» всегда включен перед рамкой «I»)Декодирование кадров в обратном направлении MPEG с использованием FFmpeg
Мне нужно иметь возможность воспроизводить эти «блокирующие» кадры в режиме «назад». Толстый что:
Это невозможно просто взять последний кадр в моем блоке и выполнять декодирование, потому что это «P» кадр и нуждается в «Интере кадр (I)», чтобы быть правильно декодируется.
Я не могу просто взять свой первый кадр «I», а затем передать его в функцию «avcodec_decode_video» ffmpeg и только затем передать мой последний «P» фрейм в ffmpeg, потому что последний кадр «P» зависит на рамке «P» перед этим, не так ли? (Ну .., насколько я проверил этот метод, мои последний декодируется P кадр имел артефакты)
Теперь путь я выступаю в обратном направлении воспроизводимое - первое декодирование все мои «блоки» кадры в RGB и сохраните их в памяти. (в большинстве случаев это будет ~ 25 кадров на максимальный блок). Но для этого метода действительно требуется много памяти ... (особенно если разрешения кадров высоки) И у меня такое ощущение, что это неправильный способ сделать это ...
Так что я хотел бы спросить, есть ли у кого-нибудь какие-либо предложения, как это «обратное» раскодирование/воспроизведение кадра может быть выполнено с помощью FFmpeg?
Благодаря
Я сейчас храню все декодированные «блок-рамки» в формате JPEG, что значительно экономит память, но все же ... в конце концов, мой выходной формат должен быть RGB (при выполнении воспроизведения), поэтому теперь мне дополнительно нужно выполнить JPEG to RGB ... По-прежнему ... ощущение, что это неправильный выбор (сохранение всех изображений в памяти) – Gediminas