четверг, 2 апреля 2009 г.

Замена кадров в 3gp файле

Нужен код, реализующий с помощью ffmpeg замену выбранных исходных кадров в 3gp видео на свои.

Не так все просто на самом деле с этим.. если бы мне надо было для моих проектов, я бы может и попарился, а так - времени нет

Смысл в том, что тут есть может не очень очевидная проблема: (очень грубое описание) при кодировании видео кодер берет картинку первого кадра и упаковывает ее каким-нибудь продвинутым способом - этот кадр называется "ключевым"; затем берется картинка следующего кадра, определяются различия с предыдущей картинкой и упаковывается только различие между кадрами, так продолжается до следующего ключевого кадра (частота которых может задаваться)

При распаковке декодер распаковывает ключевой кадр, получает полную картинку; затем распаковывается только "разница" картинок и накладывается на предыдущий кадр, получаем 2-й кадр полностью

А теперь скажем надо заменить 5-й кадр в видеоряде: если просто вставить на место 5-го кадра свой упакованный кадр, даже отметив, что он ключевой - как декодер декодирует и покажет 6-й кадр? Он ведь декодирует только разницу в картинках и наложит ее на вставленый кадр - получим мешанину на экране, мешанина будет видна какое-то время - пока не раскодируется очередной ключевой кадр

Метод решения в лоб - декодировать подряд все кадры, тут же кодируя их назад, в нужный момент подменяя картинку.. самый простой способ, но дурная работа при этом составит процентов 90 наверное, смотря сколько кадров подменяется..

Метод правильный - тот же способ, но только в пределах оджного GOP (group of picures, группы кадров между двумя ключевыми кадрами)

Комментариев нет:

Отправить комментарий