Форма входа

Категории раздела

Силы природы [10]
Новые технологии [42]
Неопознанное [27]
Интересные факты [32]
Личности [22]
Объявления, предложения пользователей и гостей!!!! [29]
Поисковики хорошо индексирует этот раздел! Вам только остается преподнести как Вам это угодно.
Полезности [83]
Рациональные предложения [26]
Конструирование [68]
СУБКУЛЬТУРЫ [9]
Деньги [10]
Заряди свой комп!!! [49]
Пробуждение ВоинА [39]
Радиолюбителям [75]
Работа с интернетом [14]
Говорун [2]
Энергетика Релейная защита [36]
Авто-мото [3]
Искусство [10]
AliExpress [17]
Видео архив [40]
Рецепты и секреты [0]

Поиск

Слушать

Радио онлайн

"Техстудент"

Наш опрос

За чем будущее
Всего ответов: 24

Мини-чат

500

Контроль

Партнёры

Четверг, 28.11.2024, 7:27:24
Приветствую Вас Интернет ПутниК
Главная | Регистрация | Вход | RSS

tehstudent.net

Журнал

Главная » Статьи » Заряди свой комп!!! [ Добавить статью ]

Видеозахват


Некогда, мне захотелось, чтобы все мои личные домашние видеозаписи, а так же старенькие 8мм киноленты, не канули в лету, а жили в цифре ещё очень долго, радуя мой глаз. Поскольку всё из вышеперечисленного на тот момент уже находилось в нестабильном состоянии, я принял решение немедленно что-то предпринять. Для перевода видео в цифру, как известно, существуют различные карты видеозахвата, а чтобы перевести (с некоторым геморроем конечно, но всё же) 8мм киноплёнку, её достаточно отснять видеокамерой на кассету, чтобы впоследствии опять-таки сделать с неё видеозахват. Подытоживая - надо было воткнуть что-либо в компьютер, что позволило бы сделать видеозахват, правдами или неправдами. Отмечу, что в данной статье я не буду затрагивать геморройную тему, как правильно захватить interlaced видео (данному термину сложно подобрать синоним в русском языке, кстати, его объяснение я дам несколько позже), а потом соответственно правильно показать такое видео на interlaced-устройстве (типа обычного телевизора). Упор будет сделан на то, как правильно захватить interlaced-видео, а потом соответственно сделать его non-interlaced (progressive), т.е. обычный, привычный глазу фильм на мониторе компьютера. В принципе, ничего не мешает впоследствии записать такое видео на DVD и спокойно просмотреть его на том же телевизоре.

Какое надо железо?

Я - не телевизионная компания, поэтому, как и всегда, надо было что-либо дешёвое, но при этом достаточно сердитое, чтобы впоследствии не было мучительно больно. Принявшись за изучение прайсов, я обнаружил, что самые дешёвые карты видеозахвата и всякие там студии нелинейного видеомонтажа "весят" около 200$, что никак не состыковывалось с возможностями моего кошелька. С другой стороны, единственными устройствами, кое-как способными (по слухам) осуществлять видеозахват, являлись TV-tuner'ы, стоившие порядка 40$. Почему по слухам? Много моих приятелей имели TV-tuner'ы, но качество "ловимой" ими телевизионной картинки оставляло желать лучшего, а запись так и вообще была просто никакой, в размеры что-то вроде 320х240, что конечно лично меня радовать не могло. Опять же, 40$ - это не 200$. В общем, немного поколебавшись, я решил попробовать. Как вы понимаете, раз уж я написал эту статью, мне удалось заставить TV-tuner делать видеозахват. Причём замечательно.

Какой TV-tuner?

Начавши изучать характеристики различных моделей TV-tuner'ов, я пришёл к неожиданному выводу, что все они сделаны на одном единственном чипе - bt8x8 (848 или 878, на момент написания статьи почти везде были воткнуты 878). Он же Philips, Brooktree (как впоследствии выяснилось), он же Conexant, в общем, всё это те же яйца, только в профиль. Разницу между 848 и 878 я до сих пор не понимаю, тем более что и драйверы от 848 подходят к 878. Оставалось выбрать карту по своим персональным вкусам (предлагаемые разъёмы, качество исполнения, цена). Я лично отдал предпочтение Jetway (а никак не хвалёной Avermedia - дорого сильно, отличается только качеством поставляемого софта, но стандартный софт, как я объясню позднее, нужно будет сразу выкинуть, так что не стоит брать раскрученный брэнд только из-за поставляемого с ним программного обеспечения). Тюнер Jetway имел достаточно хорошее качество исполнения, а так же все нужные мне разъёмы, а именно, RCA (он же "тюльпан"), Coaxial (антенна) и S-video (у меня источников S-video пока нету, но на будущее предусмотреть их подключение обязательно, т.к. это ведёт к хорошо заметному улучшению качества картинки за счёт разделения яркостного и цветоразностного сигнала). Осматривая оставшиеся доступные на тот момент модели, скажу следующее. Самым дешёвым из всех был тюнер KWorld, но когда я посетил официальный сайт производителя в поисках спецификаций, то настолько ужаснулся, что даже не стал смотреть его живьём. Чуть дороже, приближаясь к Jetway, был Eline, его я даже попробовал, но это было такое страшное угрёбище, с практически нерабочим родным софтом, что я решил доплатить ещё баксов 5, но чувствовать себя сухо и спокойно. Теперь я понимаю, что, возможно, мог взять всё-таки самый дешёвый тюнер и не компостировать самому себе мозги, т.к. стандартный софт всё равно пришлось выкинуть.

Установка TV-tuner'а.

Втыкаем. Берём диск с драйверами и ставим. Вне зависимости от модели, будет ставиться один и тот же драйвер, не меняющийся, похоже, уже лет двести, от производителя чипа bt8x8. Для NT4 это будет Brooktree capture, для 9x, 2000 и XP - Conexant, разницы никакой (правда, в NT4 возможности по видеозахвату очень ограниченные, посему пришлось поставить у себя вторую OS - Win98, и делать захват там). Естественно, в зависимости от модели, драйвера будут называться в системе по разному, но, повторяясь, это всё одно и то же. Я пробовал сторонние драйверы, но завести их по-человечески мне не удалось, тем более что родной на диске работал в общем на четвёрочку с половиной. Принципиальное различие будет в софте для просмотра телевизора, FM-tuner'а (кому он нужен :-?) и записи того и другого. Но, его можно даже не ставить - это всё такая бодяга, что и сказать страшно. Кстати, Jetway был единственным TV-tuner'ом, на диске с драйверами которого, по крайней мере, был стыдливый драйвер для NT4 (Brooktree), и хотя я им практически не пользуюсь - а всё ж приятно.

Какой софт?

Для качественного захвата видео нам потребуется суперпрограмма - iuVCR. Автор сей программы - уважаемый Иван Усков (естественно, кто ещё мог сделать нормальную программу для видеозахвата с буржуинских чипов, кроме русского человека :). Я попробовал много программ видеозахвата, но это IMHO лучшая. Затем, нам нужен промежуточный качественный (и быстрый) кодек, им будет PICVideo MJPEG codec от Pegasys inc. У них там ставятся три кодека, но нам нужен именно PICVideo MJPEG (lossless MJPEG потребляет ну очень много памяти, а wavelet 2000 вообще непонятно зачем нужен т.к. страшно тормозит). Для простой перекомпрессии в DivX замечательно подойдёт VirtualDub. Если хочется качества получше, можно использовать frameserver - AviSynth, а в нём плагин TomsMoComp - самый быстрый и качественный deinterlacer. Все эти страшные слова я объясню потом. Для простого, но качественного (в отличие от родного софта) просмотра телевизора или видеоисточника рекомендую пользовать DScaler - лучший "реальновременный" deinterlacer. Для исправления косяков синхронизации видео и звука, а также просто для просмотра полезной информации потребуется YAAI.

Захват в iuVCR.

Оставляю простор для экспериментов по части размера кадра вам, т.к. всё зависит от быстродействия компьютера, шины PCI, винчестера, в общем от всего. Лично мне нормально удаётся захватывать 25fps PAL в размер 704х528 в MJPEG с качеством 18 (19 слишком много кушает, а 20 от 19 практически не отличается), при этом процессор (Tualatin 1.1GHz) отдыхает на процентов 40. Я не понимаю, почему мне не удаётся захватить полноразмерный кадр (768х576), т.к. при этом начинаются косяки в отдельных линиях (drops, "дропы"), хотя процессор по прежнему отдыхает, видимо PCI сказывается. При качестве MJPEG 18, и записи в WAV 44100Hz mono общий поток колеблется в районе 1.5-3Mb в секунду, в зависимости от характера картинки, т.е. где-то гигабайт 6-7 в час. Многовато. А что поделаешь? Тем, кто сидит под 2000 или ХР - хорошо, там NTFS с практически неограниченным размером файла. А в Win98 - FAT32, со своим ограничением 4Gb/файл, поэтому придётся пользоваться автоматической нарезкой на 4Gb при захвате, но этот режим несколько глючноват в плане того что между стыками происходит потеря части кадров, и при склейке их воедино оригинал мы уже не получим, что грустно. Обязательно используйте формат YUY2 (вместо RGB) при захвате, это родной формат MJPEG, то есть кодеку не надо будет пурхаться с переводом RGB в YUY2 для того чтобы закодировать изображение, а это жрёт очень много ресурсов процессора и кстати грузит PCI, повышая вероятность дропов. Не старайтесь выбирать слишком экзотические размеры кадра - чревато зависанием, рекомендуется, чтобы ширина кадра делилась нацело как минимум на 16, а высота - на 8. Типичные размеры кадра - 352х288 (VideoCD PAL), 512х384, 640х480. Подключайте видеомагнитофон как можно более коротким кабелем для уменьшения количества помех, впрочем, они частично корректируются при последующей обработке. Не обращайте внимания на "расчёску" (interlace) при захвате - это обычное явление при захвате в размер кадра больший чем 352х288, т.к. полноразмерный PAL кадр содержит в себе два полукадра по 288 строк, каждый из которых отличается друг от друга по времени, при этом строки чередуются между собой (чётные-нечётные), создавая расчёску. Впоследствии она корректируется операцией, называемой deinterlace, в видеоредакторах вроде VirtualDub.

Обработка после захвата.

Захваченный файл (или его куски, если использовалась нарезка), необходимо открыть в YAAI и посмотреть, как там насчёт синхронизации видео со звуком, т.к. она иногда бывает не в порядке. Бывает, что iuVCR неправильно определяет задержку видео и звука (это не промах автора, а различные косяки в драйверах той или иной звуковой карты), и соответственно такую неправильную в файл и записывает. YAAI позволяет на лету исправлять всякие задержки и частоты кадров, просматривая результат, но я советую частоту кадров не изменять (тут iuVCR обычно прав) а варьировать задержку, добиваясь нужного. Впрочем, иногда бывает так, что все захваченные куски имеют нормальную синхронизацию. Затем, можно напрямую открыть захваченное видео в VirtualDub, поставить там фильтр deinterlace, установить параметры кодеков видео и звука (какие надобно) и пережать видео в его архивное состояние. Есть несколько "но" на букву "г". Если надо склеить несколько фрагментов (при нарезке захваченного видео в Win98), то в VirtualDub'е это уже тривиально не получится - придётся мучиться, а иной раз и вовсе ничего не выйдет. Потом, захваченный файл обычно не имеет стандартной 25fps, а нечто вроде 24.996fps, т.к. и чип и видеомагнитофон физически не могут абсолютно точно выдерживать частоту кадров. А частоту кадров (для PAL например) всё-таки лучше делать 25fps, чтобы впоследствии меньше было проблем совместимости (захочется в VideoCD например пережать или типа того). Ещё одно "но" - deinterlace в VirtualDub'е - плохой, он просто размывает два соседних поля друг в друга, в результате на движущихся деталях всё размыто и ничего непонятно, в общем, критики не выдерживает. Выход? Использовать VirtualDub в паре с AviSynth. AviSynth - это скриптовый frameserver, т.е. такая программа, которая берёт указанные в скрипте файлы, производит над ними указанные в скрипте же операции, а потом мало того - ещё и выдаёт результат как стандартный AVI файл любой программе, использующей стандартный multimedia-интерфейс для открытия AVI-файлов! Т.е. результат можно сразу посмотреть в MediaPlayer (если у компьютера здоровья хватит обрабатывать всё в реальном времени), а можно просто открыть в VirtualDub и перекомпрессировать. Скрипты - достаточно сложная вещь для неподготовленного, но бояться их вряд ли стоит. Здесь я хочу привести конкретный скрипт для AviSynth, использующий вышеуказанный плагин TomsMoComp, для качественного deinterlace захваченного видео.

Итак, устанавливаем AviSynth, достаём TomsMoComp, копируем файл TomsMoComp.dll в папку plugins (где был установлен AviSynth, например c:\program files\avisynth\plugins). Далее, в любом месте, создаём файл с любым названием и расширением avs, например video.avs. Это будет обычный текстовый файл, поэтому его можно открыть в любом текстовом редакторе и внести туда такие строки (копируйте прямо отсюда! :):
LoadPlugin("c:\program files\avisynth\plugins\TomsMoComp.dll")
clip=AVISource("g:\VIDEOCAPTURE\1.avi")++AVISource("g:\VIDEOCAPTURE\2.avi")
clip=AssumeFPS(clip,25,sync_audio=true)
clip=ConvertToYV12(clip,interlaced=true)
clip=TomsMoComp(clip,1,5,1)
return(clip)
Не нужно излишней проницательности чтобы сообразить что к чему, надо лишь подставить в выделенные жирным шрифтом части строк имена своих файлов, и указать правильное местоположение плагина. Далее я даю построковое объяснение скрипта.

LoadPlugin("c:\program files\avisynth\plugins\TomsMoComp.dll")

Ну я думаю всё понятно. :)

clip=AVISource("g:\VIDEOCAPTURE\1.avi")++AVISource("g:\VIDEOCAPTURE\2.avi")

Соединение двух кусков. Если кусок один, то понятно, что ничего соединять не надо. :) Операция "++" - это "нормальное" склеивание двух файлов с сохранением синхронизации аудио и видео (просто "+" будет склеивать потоки "встык", без учёта задержек видео относительно аудио, и это нехорошо). Склеить можно кажется до 256 файлов, главное чтобы размер кадра был одинаковый и частота кадров была примерно схожей (24.996fps и 24.998fps например AviSynth воспринимает как одно и тоже, что нам и надо).

clip=AssumeFPS(clip,25,sync_audio=true)

Данная строка говорит программе, что она должна проигнорировать всякие там 24.996fps и однозначно решить, что клип должен быть именно 25fps. Естественно, должна произойти рассинхронизация аудио и видео, что на большом протяжении времени весьма негативно скажется, но сие предохраняет параметр sync_audio=true. При этом программа синхронизирует потоки посредством смены не только частоты кадров, но и подгонки частоты аудио. При этом получается что-то неприятное вроде 44103Hz, но оно совершенно спокойно корректируется в VirtualDub - просто производится конверсия на удобную частоту, хоть ту же 44100Hz. Примечание: реально никакой конвертации в 25fps не происходит - программа просто начинает чуть "быстрее" играть клип, что совершенно незаметно, при этом не пропуская и не добавляя никаких лишних кадров.

clip=ConvertToYV12(clip,interlaced=true)

Конвертация видео в формат YV12 (несколько более продвинутый чем YUY2). Продвинут он тем, что при обработке происходит значительно меньше надругательств над цветом, и к тому же сама обработка происходит быстрее. При последовательной обработке файла несколькими эффектами, прирост быстродействия (сам мерял) - около 30%, что по-моему стоит того. Параметр interlaced стоит true, оно и понятно - наш клип пока ещё interlaced.

clip=TomsMoComp(clip,1,5,1)

Вот она - волшебная операция deinterlace. Параметры объяснять не буду - я с ними сам намучился, но выбрал лучшие, впрочем с плагином конечно же есть документация, кому надо. При этом на выходе получаются обычные progressive картинки, которые можно смотреть отдельно как фотографии, что собственно нам и надо. Вообще, не люблю interlaced видео.

return(clip)

Возвращение результата в программу, которая собственно откроет avs файл.

Данный avs файл запросто открывается в VirtualDub, при этом мы видим чистую картинку безо всяких расчёсок, да к тому же слегка отфильтрованную. Если видеолента и видеомагнитофон были достаточно хорошего качества, то в принципе можно всё сразу пережать в DivX и радоваться. При этом стоит отметить, что в VirtualDub'е можно поставить опцию "Fast recompress", тогда результат в формате YV12 будет сразу направляться на кодер DivX, а ему, кодеру, от этого будет только хорошо (и быстро), т.к. YV12 - родной формат для MPEG4. Если же будут применяться фильтры для очистки/исправления изображения, придётся пользоваться "Full processing", при этом YV12 переводится в RGB со всеми вытекающими отсюда тормозами, но что делать... Попутно, чтобы можно было открыть avs, на выходе которого присутствует YV12, в системе необходим кодек DivX (или XviD). Кто скажет, у кого их нет? :-)

P.S. и прочее.

Для того чтобы классно обрабатывать и очищать видео, могу только посоветовать постигнуть всю систему команд AviSynth, и впоследствии вообще не пользоваться фильтрами VirtualDub (я не хочу сказать что они плохие, но формат RGB - это неизбежные тормоза, а при работе с часовыми видеофайлами это очень грустно). Очень хороший плагин к AviSynth - STMedianFilter, находится по тому же адресу что и TomsMoComp, фильтрация шума и всяческих прочих артефактов. Изменение размеров кадра, наложение логотипов, подстройка контрастности, яркости, насыщения и гаммы - стандартные функции AviSynth, а поскольку всё производится в YV12, прирост быстродействия иной раз потрясает. Очередной полезный плагин к AviSynth - CNR2 (Chroma noise reduction), к сожалению, официальной странички плагина пока не существует, но его очень легко найти в поисковиках по строчке "CNR2". Его действие на шум в цветовой области просто потрясающее, попутно он убирает синие полосы, так свойственные PAL записям на не очень хороших лентах. Кстати, для VirtualDub аналогичная версия этого плагина называется просто CNR.

Упаси вас Бог пользоваться Adobe Premiere для обработки/пережатия, ввиду его неповоротливости и совершенно ужасном deinterlace (могли бы сделать получше для такого-то продукта, блин). Сей deinterlace просто убирает нечётные строки, а вместо него вставляет интерполяцию соседних чётных. Браво...

Не используйте mp3, равно как и любой другой кодек, для компресии звука непосредственно при захвате. Места это сэкономит немного (при размерах видеопотока), и к тому же может привести к потерям синхронизации и дропам из-за сожратия части ресурсов. Лучший формат - чистый WAV.

Говорят, что бывают тупые драйвера или кодеки, которые путают четные и нечётные поля между собой, а это очень нехорошо, и сделать корректный deinterlace для такого видео невозможно, пока мы не сменим порядок полей и не приведём их в правильное состояние. К слову сказать, тренированным глазом сразу видно неправильный порядок даже без обработки, но после deinterlace такого файла не заметить уродство картинки просто невозможно. Любой из указанных редакторов имеет в своём инструментарии простую операцию SwapFields (перестановка полей), так что это не проблема - если видео после deinterlace уродское, то это исправляется просто - надо всего лишь сменить порядок полей перед операцией deinterlace.

Мои персональные установки - захватываю в 704х528. При этом кстати отметаются ненужные артефакты VHS сверху и снизу экрана, которые хорошо видны, если захватывать полный 768х576 кадр. Затем - AviSynth, deinterlace посредством TomsMoComp, убирание цветового шума и PAL-косяков благодаря CNR2, и сглаживание неоднородностей в яркостном диапазоне STMedianFilter'ом. Картинка получается - хоть фотографию печатай, и это при том что мой видеомагнитофон Samsung уже пережил своё десятилетие. При захвате с камкордеров качество ещё лучше, впрочем, конечно, смотря какой камкордер. Кстати, так до сих пор и не знаю, что правильнее - камкордер или видеокамера... ;)

Анатолий Савенков

Категория: Заряди свой комп!!! | Добавил: snettens (01.04.2010)
Просмотров: 2335 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: