[identity profile] allek-san-derr.livejournal.com posting in [community profile] useful_faq
Есть ли возможность в программах  для проигрывания видео (например Gom player, Classic media player или  Win media player)  возможность смотреть наоборот, те с конца, сзади-на-перёд?

Date: 2008-05-15 06:05 pm (UTC)
From: [identity profile] n0mad-sexhex.livejournal.com
http://www.jakeludington.com/dv_hacks/20070306_reverse_a_video_clip_and_play_it_backwards.html

только мощей у вашего компа наврядли хватит в реал-тайме этот финт гладко проделывать. Почему — толго разжевывать :)

Date: 2008-05-15 06:17 pm (UTC)
From: [identity profile] pieceofsummer.livejournal.com
Потому что кодеки используют разностное сжатие между ключевыми кадрами. И чтобы получить картинку кадра при обычном проигрывании, нужен только предыдущий кадр, а при реверсивном - сначала найти ближайший ключевой, а потом применить все разности от него до текущего.

Date: 2008-05-15 06:39 pm (UTC)
From: [identity profile] pieceofsummer.livejournal.com
Если на пальцах:
                        --------->
--+----+------+------+-------+--------+--------+-------+----+--
\ |    |      |      |       |        |        |       |    | /
/ | KF | k[1] | k[2] |  ...  | k[i-1] |  k[i]  |  ...  | KF | \
\ |    |      |      |       |        |        |       |    | /
--+----+------+------+-------+--------+--------+-------+----+--
       d[1]   d[2]   d[3]... d[i-1]   d[i]     d[i+1] ...

Это поток кадров в фильме. Время от времени есть ключевые кадры — обычно, это кадры, значительно отличающиеся картинкой. Между ключевыми кадрами идут обычные кадры — обычно, с незначительными изменениями от одного к другому.
Поэтому кодек хранит ключевые кадры целиком, а для остальных составляет "дельты".
Так, пусть d[1] - разность между ключевым кадром (KF) и первым кадром (k[1]), d[2] - разность между k[2] и k[1], и так до следующего ключевого кадра KF.
Пусть в какой-то момент нам нужно показать i-й кадр (k[i]).
При прямом воспроизведении у нас уже есть k[i-1], и мы просто применяем к нему d[i].
При обратном воспроизведении нам нужно просканировать всю цепочку k[i], k[i-1], ..., k[1], KF (дойти до ближайшего ключевого кадра) и последовательно применить к нему все d[1], d[2], ..., d[i].

С учетом того, что делать это нужно для каждого кадра, то получается весьма дорогая по времени и ресурсам операция.

Date: 2008-05-15 06:46 pm (UTC)
From: [identity profile] pieceofsummer.livejournal.com
Ну и вопросы :)
Это сильно зависит от конкретного видео (частоты ключевых кадров).
И вообще, я не эксперт в видео. Думаю, если файл лежит локально, то какого-нибудь современного Core2Duo должно хватать. :)

Date: 2008-05-15 06:53 pm (UTC)
From: [identity profile] n0mad-sexhex.livejournal.com
можно закодить так, что будет частокол из кеёв, и тогда крутиться будет одинаково — хошь вдоль/хошь поперек. Можно поставить (при кодировании) интервал в 500 фреймов между кеями, и тогда при плейбеке реверсом будете ждать до морковкина заговенья, пока декодер распакует пару соседей. Вам же выше вроде все доходчиво изложили, перечитайте.