КАК Я СЖИМАЛ...

Здесь я хотел бы рассказать историю о переводе видео с магнитного на цифровой носитель. Можно рассматривать как руководство к действию.

Цель: получить на болванках копию Hi8 кассет, пригодную для просмотра как на мониторе, так и через TV-выход видеокарты на телевизоре, записывая на одну не менее 1,5 часов.

Приборы и материалы

  • 2 компьютера: AtlonXP 1700+ (80 Gb HDD) и AtlonXP 2000+ (40 Gb HDD), 256мб RAM каждый, соеденены 100мбит LAN, Win2k SP2.
  • Видеокамера Sony (модель 1996 года)
  • Видеокассеты Hi8 с видео (7 штук по 1,5 - 3 часа)
  • Плата видеозахвата AverMedia (разрешение - 352х288, 30fps noninterlaced, RGB16 или YUY2) (на AtlonXP 1700+)
  • Интегрированный в материнскую плату звук
  • VirtualDub 1.51
  • NunDub 1.0RC2
  • DivX 5.03 Professional
  • CoolEdit 2000
  • WinAMP 2.80 + out_lame.dll + lame_enc.dll v3.93
  • Windows Media Player Classic
  • ffdshow декодер
  • Nero Burning Rom 5.5
  • CD-RW ASUS CRW-4012A
  • 7 CD-R болванок 40x

Запись

Первая трудность, с которой пришлось столкнуться - это выбор кодека для переписи файлов с видеокамеры на компьютер для последующего сжатия. Ясно, что напрямую сжимать видео кодеком MPEG4 не выдерживает никакой критики: трудности с последующим монтажам и обработкой (дельта-кадры), невозможно устроить двухпроходное сжатие, да и не всякий компьютер такой сильный :). Ясно, что без сжатия записывать такие объемы могут позволить себе только обладатели RAID, да и с точки зрения быстродействия это не окупается (STRIPE RAID ? :). Проблема решилась установкой видеокодека PICVideo MJPEG (Pegasus), Motion JPEG кодек как раз идеально подходил для этой цели: высокая скорость, отсутствие дельта-кадров, приемлемое сжатие. После некоторых экспериментов были выбраны оптимальные настройки, а именно: движок "качество" - на 19. Это качество по идее можно сделать и меньше, так как видимые искажения начинаются где-то с 12 и ниже (видимые искажения в канале цвета - с 17). Кнопка "Advanced" нажималась, но игра с этими настройками ни к чему хорошему не привела. Это качество соответствует сжатию около 5.0:1. Вторая проблема - это выбор программы для видеозахвата. VirtualDub был выбран как самый не громоздкий, однако дальше в нем появлялись некоторые проблемы. В качестве компрессора звука сначала был выбран Micrisoft ADPSM, однако при воспроизведении были проблемы (что-то не так с у него с синхронизацией в реальном времени), поэтому окончательно звук записывался без сжатия (по сравнению с размером видео - это капля). MP3 не использовалось в силу трудностей с монтажом. Окончательно:

  • Видео: PVMJPG 352x288 25 fps
  • Звук: PCM 44Khz Stereo

Запись проходила спокойно, но была замечена странность в виртуалдубе: когда окно предпросмотра полностью закрывается другим окном, загрузка процессора падает с 70% до 15%. Автору виртуалдуба есть над чем поработать. К прочему звук постепенно убегал от видео, за 1 час на 200 мс, и появлялось около 80 пропущенных (dropped) кадров, поэтому кассета переписывалась в 3-4 приема (2-3 Гб фрагменты .avi на выходе).

Редактирование

Средство редактирования - тот же VirtualDub. Ничего сверхъестественного в плане эффектов не требовалось, просто дословная копия кассет с вырезанием съемок чьих-то ног и салфеток на столе :). Благодаря LAN во время записи одного фрагмента другой уже редактировался (удалялся мусор и разбивался на файлы по темам). При этом после дописывании очередного фрагмента он просто "приклеивался" к предыдущему и редактировался дальше (file->append avi segment). Естественно все это делалось в режиме "direct steram copy", без рекомпрессии. В итоге получилось около 35 Гб отредактированного и разбитого по темам в виде файлов видео.

Сжатие

В качестве средства сжатия рассматривались три претендента: XviD 2.1, DivX 5.03 и NunDub (DivX 3.11). По результатам тестов NunDub отмелся сразу (сложность настроек, не требовалась совместимость со старыми кодеками). В результате еще одного теста (сжатие фрагмента видео с разными настройками, в том числе bidirectional encoding, GMC и quarter pixels, многопроходное сжатие) выиграл DivX 5.03. XviD при всех своих достоинствах, при равных условиях "сыпал" макроблоками и делал чуть большие файлы. DivX, напротив, при минимуме имеющихся настроек давал прекрасный результат. В итоге:

  • Кодек: DivX 5.03, Multipass (2 прохода), 850кбит, все остальные настройки выключены или по умолчанию.

При сжатии было замечено, что видео имеет отношение, не равное 4:3, к тому же по краям были полосы (граница кадра). Поэтому в виртуалдубе поставлен фильтр для обрезания краев (1 пиксель справа и слева и 4 сверху и снизу) и растяжение на 384x288 бикубиком. К тому же это положительно сказывается на сжатии (отсутствуют резкие, быстро меняющиеся полосы по границе кадра, количество макроблоков четное и хорошее - 384/16x288/16 = 24x18, ресайз бикубиком - сглаживает слишком резкие границы). Однако это уменьшило скорость сжатия со 120 до 100 fps!

Сжатие звука - не долго думая:

  • MP3, 32Khz mono, 52кбит VBR (из пижонства :).

Можно было бы и исходные файлы писать 32Khz моно, но кто же знал, что камера - mono :). Для этого из каждого нарезанного для сжатия файла сохранялась звуковая дорожка (file->save WAV), и в винампе через dsp фильтр для нормализации громкости (Enhancer 0.17) писалось прямо в MP3 через LAME кодер. VBR MP3 файлы в дальнейшем снова склеивались с уже сжатым видео с помощью нандаба. Выгоды от VBR, если честно, нет, потому что в некоторых кривых плеерах при VBR звук не совпадает с видео. Некоторые звуковые дорожки в PCM чуть-чуть редактировались в CoolEdite'e (добавлялась музыка вместо шипения ветра, фильтровались шумы от работающей техники, добавлялись комментарии).

Для сжатия удобно использовать встроенный в виртуалдуб организатор работ (file->job control), для этого надо при сохранении видео надо ставить внизу птицу, тогда задание попадет в этот лист.

Результат: 3,5 Гб файлов от 14 до 684 мб размером каждый (684 мб = 1час 45 минут). Возникла задача: разместить их на 700 мб болванках с как можно лучшим использованием места. Для этого был написан специальный JavaScript :))), который перебирал все возможные варианты расположения файлов на болванках и выбирал лучший. Если будет время, доведу его до ума и выложу.

Последние штрихи - запихиваем на каждую болванку видеоплеер (Windows Media Player Classic мне показался лучшим вариантом), видеокодек ffdshow и на всякий пожарный MP3 кодек. И делаем автостарт (autorun.inf). Запускаем Nero и болваним...

Выводы: в некоторых местах видео есть зерно (в плохо освещенных помещениях, в сумерках - естественный шум матрицы камеры), оно конечно негативно сказывается как на степени сжатия, так и на качестве. Попытки фильтрации (smart smooth) привели только к ухудшения качества картинки, поэтому никакой обработки, кроме обрезания и растягивания, с видео не производилось. Сжатое видео в местах с зерном само размывается, обеспечивая тем самым эту "фильтрацию" (тем более с включенным постпроцесингом в декодере). На экране телевизора с обычного расстояния просмотра потерь не заметно (немного убавилась глубина цвета, но это исправляется настройками декодера или того же телевизора). На экране компьютера с дальнего расстояния - как на телевизоре, с ближнего - немного бросается в глаза эффект "жидкой картинки", особенно в местах с плохим освещением и там, где есть эффект "fade". Небольшой ореол вокруг надписей даты и времени, почти исчезает при включении постпроцессинга. Кроме зерна в видео есть небольшие колебания в цветности, но это уже претензии к видеокамере. В ffdshow можно включить фильтрацию шумов "temporal noise reduser" - и помеха исчезает (но появляется новая :). К звуку претензий нет :)))

*****
(c) kusaku 2003