Если у Вас
слабая машина и есть неукротимое желание смотреть фильмы, записанные в формате
MPEG-4, то во многих случаях выход может быть только один - уменьшить разрешение
картинки, при этом нагрузка на процессор уменьшится и просмотр фильма станет
возможным (прадва, с потерей четкости). С успехом применять данную процедуру
можно для фильмов, сжатых с применением кодека DivX ;-) MPEG-4 Fast-Motion.
В случае с кодеком DivX ;-) MPEG-4 Low-Motion есть некоторые проблемы
(читайте об этом в конце страницы).
Если, скажем,
исходный фильм Taxi имел разрешение 696x392 (кстати, в качетсве примера
я выбрал настоящий "шедевр" пиратского резайца :)) и практически не шёл на
Вашей машине, то после уменьшения формата картинки, например, до 480x256 -
скорее всего, фильм уже пойдёт (если процессор не слабее P-200MMX).
Прежде всего,
необходимо выяснить аппаратные требования для включения оверлея у Вашей видео-карты,
чтобы при уменьшении картинки не обойти и этот важный параметр стороной. Выяснить
это можно таким образом - переводите палитру в "256 цветов", запускаете фильм
и смотрите на изображение - если оно идёт как через сетку, то оверлей не работает,
а если все выглядит нормально, то оврелей работает (запомните, каким значениям
кратны вертикаль и горизонталь - скорее всего, для старых видео-карт, это
будут коэффициенты 16x16). Предположим, при работающем оверлее получили коэффициенты
для вертикали и горизонтали, равные 16-ти - будем ориентироваться на них в
дальнейшем.
Ещё один
момент - иногда при компрессии неправильно обрезают черные полосы у широкоформатных
фильмов (как в случае с нашим фильмом). Полезного ничего нам остатки черных
полос не дают, а часть цифрового потока (и без того малого) и машинных ресурсов
при декомпрессии (и без того скромных) - требуют. Осуществляя уменьшение разрешения
картинки, мы имеем возможность дополнительно удалить и эти полосы, что само
по себе есть "не плохо"...
Перейдем
к практике. Для решения поставленой задачи используем хорошо знакомую уже
многим программу VirtualDub,
точнее, некоторые ее возможности - прилагающиеся видео-фильтры. Теперь опишу
конкретно весь выбор предустановок преобразования на примере выбранного фильма.
File=>Open video
file... - открываем фильм с CD-ROM, а лучше с харда;
Audio=>Direct stream
copy - прямое копирование потока и про звук забываем;
Video=>Full processing
mode - режим полного преобразования;
Video=>Filters...=>Add...=>null
transform=>Ok=>Clipping - здесь поля X1 offset и X2 offset
можно оставить без изменений, поскольку при уменьшении мы выберем кратные
16-ти значения, а вот в полях Y1 offset и Y2 offset поставим
значения 16 и 14 соответсвенно, обрезав тем самым лишние
черные полосы (значения подбираются эксперементально при визуальном контроле).
Жмём Ok и выбираем, собственно, сам фильтр для уменьшения разрешения
картинки - Add=>resize...
Теперь нам
необходимо уяснить одну важную вещь - любое изменения первоначального размера
кадра должно быть пропорциональным, иначе искажения геометрии (если оно небыло
допущено при первоначальной компрессии в MPEG-4) нам не избежать... В нашем
случае, после удаления черных полос мы имеем соотношение сторон в кадре 696x362
(не уверен, что с геометрией тут все в порядке... к сожалению, нет этого фильма
на DVD, так бы можно было сказать однозначно), т.е. имеем коэффициент соотношения
горизонтали к вертикали - 1,92. Теперь зададимся каким-либо конечным значением
для горизонтали, например 480 пикселов - тогда вертикаль должна составлять
480/1.92~250 пикселов. Поскольку ближайшее кратное 16-ти значение будет 256,
то остановим свой выбор для значения вертикали на нём.
Далее, выбираем
настройки кодека DivX ;-). Здесь я использую стандартные кодеки из набора
divx_311alpha, которые вставляют ключевые кадры через равные интервалы,
посколку абсолютное большинство фильмов сжато ими. Однако, никто не запретит
Вам использовать и кодеки с автоматическим анализом сцен и всталяющие ключевые
кадры в зависимости от степени изменения содержимого кадра - DivX.Scene-Detect.Patch.v1.0.
Video=>Compression=>DivX
;-) MPEG-4 Fast-Motion - выбираем кодек DivX ;-) Fast-Motionтакой же, что и при первоначальной компрессии, здесь в поле Data
rate я ставлю максимальное значение 6000, но можно попробовать и меньше,
чтобы уложить фильм одним файлом в объем CD-R... Keyframe every лучше поставить такой же, как и у источника (определить
его можно разделив общее количество фреймов на количество ключевых кадров,
а полученное значение разделить на fps);
File=>Save AVI...
- выбираем путь и имя получаемого преобразованого файла, прописывая расширение
*.avi через точку.
Эксперименты
с фильмами, компрессированными изначально кодеком Fast-Motion, показали,
что при выборе скорости потока в пределах 3000kbit/s, получаемый файл по объему
не превосходит исходный, а дальнейшее увеличение скорости потока не приводит
к существенному росту конечного объема файла и ощутимо не сказывается на качестве
картинки... На мой взгляд это связано с особенностью кодека Fast-Motion
в том, что устанавливая какое-либо значение для скорости потока в поле Data
rate, выбирается максимальное значение, которое будет необходимо для компрессии
группы кадров. Следовательно, если это значение лежало ниже порога 2500kbit/s
(при первоначальной компресиии), то выбор значения 3000kbit/s останется невостребованным,
т.е. такое значение все равно не будет достигнуто... В результате, я устанавливаю
в поле Data rate максимальное значение 6000 (с запасом) и объем получаемого
файла все равно не превышает исходный. Исключение было только однажды (превышение
на несколько десятков мегабайт), пришлось отрезать титры в конце фильма и
довести объем до приемлемого значения...
Другое дело,
кодек Low-Motion. Здесь устанавливаются значения, которые будут соответсвовать
средней скорости потока (для сцен со средней динамикой) и колебания (как максимальные,
так и минимальные) могут быть достаточно существенными. Именно поэтому порой
бывает очень трудно просчитать объем получаемого файла...
Процедура
преобразования этого фильма у меня заняла около 3-х часов на машине P-II/450MHz/128Mb.
Попытка перевести программу на высокий приоритет иногда приводит к мертвым
зависаниям системы, так что, использую Normal.
При попытках
повторной компрессии фильмов, первоначально сжатых кодеком Low-Motion,
почти всегда возникают проблемы следующего характера - при воспроизведении
фильма звук продолжает идти, а картинка замирает, причем такие сбои наблюдаются
по нескольку раз за фильм, независимо от задаваемой скорости потока и интервала
между ключевыми кадрами (изменяются только места в фильме, где возникают сбои).
Я нашел для себя способ обойти эту неприятность, однако он слишком продолжительный
по времени и представляет в основном теоретический интерес... Если сказать
в двух словах, то сначала фильм дважды пережимается с изменением разрешения
(разными кодеками Fast-Motion и Low-Motion), затем отслеживаются
сбойные места и с помощью программы ProjectDivX конечный вариант фильма
комбинируется из разных кусков (почти всё в варианте Low-Motion, а
сбойные места в варианте Fast-Motion). Кстати, с помощью этой программы
(или аналогичной) можно осуществить так называемое смешанное
кодирование, получая при этом практически идеальное качество картинки...