2010-05-18

HDTV дома (на слабом железе)

Давно было желание смотреть дома на телевизоре видео в формате HD. И вот я с минимальными затратами реализовал эту мечту.

Аппаратная часть
Для передачи картинки будем использовать интерфес HDMI ( High-Definition Multimedia Interface ). Это цифровой интерфейс, обеспечивающий передачу данных без потерь качества (помехоустойчивый). У современных ЖК панелей наверняка есть разъем под него.
Со стороны компьютера этот интерфейс реализован в виде DVI ( Digital Visual Interface ).
По этому нам потребуется переходник DVI ( вилка ) -> HDMI ( гнездо ). Переходник не делает ни каких преобразований и по этому ни каких искажений в цифровую картинку не внесет.



Я купил такой переходник за 350 р.
Подключаем к цифровому выходу видеокарты.



Аудио выход снимаем со звуковухи. Для этого пришлось купить удлинитель 3.5м (штекер jack - гнездо под jack ) примерно за 100 рублей. И подключить к нему имеющийся в наличии шнур штекер jack - 2 тюльпана.

И подключить все это (HDMI шнур и аудио) во вход HDMI2 на ТВ:




ОС
Далее необходимо настроить 2 монитора. В зависимости от драйверов видеокарты и ОС это будет выглядеть по-разному. У меня (Linux, nvidia) делалось это так:

В nvidia-settings мы видим пока один экран: Screen0, но нажимая Configure - можем выбрать TwinView или Separate X Screens.
Я выбрал последнее (чтобы рабочий стол не растягивать на телевизор).


После чего мы увидим уже 2 Screen-а, среди которых будет и телевизор. Смотрим его родное разрешение (Native Resolution).



Потом настраиваем ТВ, выставляя ему это разрешение и сохраняем файл "Save to X Configuration File".




У меня nvidia-settings сгенерировала такой файл: xorg.conf

Теперь просматривать видео на втором экране можно так:
DISPLAY=:0.1 mplayer -fs video.avi


При этом он сразу запустится на ТВ и не будет мешать нам.

Все. Видео можно смотреть. За исключением одного НО!
У меня слабый компьютер!

Слабый компьютер
AMD Athlon XP 2600 (32bit, 1GHz), Nvidia 5700, 1GB RAM

Видео зажатое кодеком h264 - показывает слайд-шоу (не зависимо от разрешения, хоть 1920:1080, хоть 1280:720)

По этому было принято решение - пережимать видео.
Логичнее всего пережать его в разрешение родное для ТВ (у меня это 1360:768), и желательно с минимальными потерями качества.

Перебрав наверное больше десятка кодеков с различными параметрами и уже было отчаявшись - я к с своему удивлению нашел-таки кодек без потери качества HDTV и работающий на слабом компьютере!
Это ffvhuff, входящий в библиотеку libavcodec - FFmpeg с алгоритмом Хаффмана (HuffYUV c использованием YV12).

Т.е. перекодировать фильм можно без потери качества и при этом играющий на слабом компьютере можно командой:
mencoder -ovc lavc -lavcopts vcodec=ffvhuff -oac copy in.avi out.avi


Единственный минус этого кодека - размер. Выходной файл получается порядка 1Гб/мин. Т.е. полуторачасовой фильм у вас разожмется почти на 100Гб. Но если фильм хороший - это того стоит!
К тому же место сейчас не такое дорогое, как апгрейд железа.

Если по месту у вас тоже ограничения - лучшем выбором станет кодек mjpeg. Он показал лучшее соотношение размер/качество.
Особенно меня порадовало качество картинки на динамичных сценах и быстрых сменах планов - ни каких квадратиков.
Пережать кодеком mjpeg можно командой:
mencoder -ovc lavc -lavcopts vcodec=mjpeg:vqscale=2:mbd=2 -oac copy in.avi out.avi


Так же я пережимал аудио из AC3 в mp3 (чтобы снизить нагрузку на CPU во время проигрывания). Все мои изыскания по кодекам можно найти в файле тут: encode-hdtv.sh
Это "самодокументированный" скрипт для пережатия видео под слабый PC.

Подробнее на форуме БЛУГ тут.

Приятного просмотра.

1 коммент.:

JanuskieZ комментирует...

Hi... Looking ways to market your blog? try this: http://bit.ly/instantvisitors