Идея про сжатие видео

stksa

Возможно, глупая, а возможно, вообще боян
Как обычно всё хранится - через некоторые промежутки натыканы ключевые кадры, а для тех, которые посередине - только отличия от предыдущего. Почему бы не делать так (конечно, не для вещания, но для локального просмотра подойдет(:
Выбираем некоторые кадры - "ключевые нулевой степени", которые будут храниться полностью. Затем, между ними - "ключевые кадры первой степени", для которых будет храниться отличие от СРЕДНЕГО АРИФМЕТИЧЕСКОГО между двумя соседними ключевыми. Затем, в полученныхпромежутках - "ключевые второй степени", для которых будет храниться опять же отличие от среднего арифметического между двумя соседними ключевыми кадрами степени 1 или выше, и т.д... Ну или брать не среднее арифметическое, а с теми коэффициентами, на каком расстоянии текущий кадр от тех двух, по которым мы его строим (для ещё большего уменьшения объёма).
По-моему, это должно очень сильно уменьшить объём при том же качестве, на конкретных задачах - например, если есть плавный переход от одного состояния к другому, при использовании обычных методов будет храниться первый кадр + куча отличий каждого следующего от предыдущего. А при моём способе - только первый и последний!
Что думаете?

adgi65

Каково по твоему "обычное" расстояние между ключевыми кадрами?
В DIVX по умолчанию стоит 300 кадров + по смене картинки. Т.е. твои плавные переходы должны длиться 12 сек.
Обычно ключевые кадры разные "до неузнаваемости". Т.е. рассчитать среднее между ними не представляется возможным.

stksa

Не обычное, а выбирать как-нибудь оптимальнее, т.е. расстояние не фиксированное!
Конечно, сжиматься, наверное, будет, сверхдолго, но резыльтат будет стоить того?

Chupa

B-фреймы уже придумали, да

stksa

А это что?
То есть, я изобрела баян?

Werdna

Сколько ты предлагаешь кадров хранить в памяти? ИМХО, очень много

stksa

Только целиком промежуток между двумя ключевыми кадрами - не больше 1000 кадров.

Werdna

Из твоего описания получается немного не так.
Лучше так: сначала разбиваем наинтервалы с маленьким изменением, потом "начальные кадры" сравниваем и, возможно, некоторые окажутся похожими. в итоге получаем несколько стартовых кадров, несколько масок-отличий для других стартовых, и другие уже по-обычному.

hoha32

Угу, I, P и B - фреймы.

alshevskaya

Угу, I, P и B - фреймы.
Гыгыгы. Тут вона предлагают I/P/B/SP/SI фреймы

hoha32

Ну никто же не говорит, что надо останавливаться на достигнутом

apl13

Лучше так:
сперва разбиваем на кадры, потом - на подкадры. Затем подкадры сортируем, кластеризуем, от каждого берём хэш-функцию и записываем;
ключевые кадры надо хранить в виде стека списков очередей; а фреймы придётся записать в базу данных.
Да, придётся ещё организовать синхронизацию между потоками. И животноводство!
Вот тогда будет хорошо.

apl13

Ты мастику для кукольных головок изобретать ещё не пробовала?

stksa

Нет
Тут мне в голову пришла ещё одна совсем извращённая идея, правда, это наверное нереализуемо
Из чего состоит фильм? Есть некоторые блоки пикселей, которые меняются следующим образом:
1) Перемещение
2) Уменьшение/увеличение
3) Плавный переход к другому виду
Ну и комбинации всякие, конечно. Тогда, если научиться всё это выделять из видео, можно вообще всё сжать очень сильно. Например, для человека, который очень часто появляется на экране, мы не будем хранить кучу информации, а только прорисовку его рук/ног/итд, и как они движутся/удаляются/переходят в что-то другое (для спецэффектов)

hoha32

Приблизительно так уже и делается. При не очень большом битрейте вокруг движущихся относительно неподвижного фона частей можно заметить "обводку".
Оставить комментарий
Имя или ник:
Комментарий: