16.4. Видео

Написано от Ross Lippert.

Тази област е нова и се развива с главоломна скорост. Бъдете търпеливи. Не всичко ще работи така гладко, както в областта на звука.

Преди да започнете, трябва да знаете модела и чипа на вашата видеокарта. Докато XFree86 подържа много карти, малко са тези които дават добри резултати. За да получите списък с разширенията на Х, подържани от вашата карта, използвайте xdpyinfo(1) докато X върви.

Добра идея е да имате малък MPEG файл за тестване на различни плейъри и опции. Тъй като някои DVD плейъри търсят по подразбиране DVD диск в /dev/dvd или имат това устройство програмирано в тях, полезно е да създадете символни връзки към съответните устройства:

# ln -sf /dev/acd0c /dev/dvd
# ln -sf /dev/racd0c /dev/rdvd

Във FreeBSD 5.X, която използва devfs(5) има малко по-различен набор от препоръчани връзки:

# ln -sf /dev/acd0 /dev/dvd
# ln -sf /dev/acd0 /dev/rdvd

Забележете, че поради естеството на devfs(5), ръчно създадените връзки като тези, няма да просъществуват ако рестартирате компютъра си. За да създадете символичните връзки автоматично при стартиране на вашия компютър, добавете следните редове в /etc/devfs.conf:

link acd0 dvd
link acd0 rdvd

В допълнение, DVD декриптирането изискващо специални DVD функции се нуждае от права за запис върху DVD устройствата.

Някои от портовете разчитат на следните параметри в ядрото, за да се компилират правилно. Преди да опитвате да ги компилирате, добавете следните два реда към конфигурацията на ядрото, компилирайте го и рестартирайте:

option CPU_ENABLE_SSE
option USER_LDT

Note: option USER_LDT не съществува на FreeBSD 5.X.

За да подобрите интерфейса на споделената памет на Х11, се препоръчва някои параметри на sysctl(8) да бъдат увеличени:

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768

16.4.1. Определяне възможностите на на видеокартата

Има няколко начина за гледане на видео под Х11. Това кое ще работи, в голяма степен зависи от хардуера. Всяко разширение описано по-долу ще има различно качество според ползваните карти. Второ, обработката на видео под Х е тема, получаваща много внимание напоследък и с всяка нова версия на XFree86 може да има значителни подобрения.

Ето списък на често срещани видеоинтерфейси:

  1. X11: обикновен X11, ползващ споделена памет.

  2. XVideo: разширение на X11, подържащо видео в който и да чертан обект.

  3. SDL: Simple Directmedia Layer (Прост пряк медиен достъп).

  4. DGA: Direct Graphics Access (Директен графичен достъп).

  5. SVGAlib: конзолен интерфейс на ниско ниво.

16.4.1.1. XVideo

XFree86 4.X has an extension called XVideo (известно още като Xvideo, Xv и xv) позволява графиката да бъде показвана директно в изобразяваните предмети чрез специално ускорение. Това разширение осигурява много добро качество на видео възпроизводството дори на слаби машини (например на лаптопа ми - PIII 400 Mhz). За нещастие, списъкът на картите подържащи този формат за момента е:

  1. 3DFX Voodoo 3

  2. Intel® i810 and i815

  3. някои S3 чипове (като Savage/IX и Savage/MX)

Ако картата ви не е една от тези, не унивайте. XFree86 4.X добавя нови xv възможности с всяка нова версия. [1]. За да проверите дали разширението се подържа, използвайте xvinfo:

% xvinfo

XVideo е подържано от вашата карта, ако резултатът изглежда като:

X-Video Extension version 2.2
screen #0
  Adaptor #0: "Savage Streams Engine"
    number of ports: 1
    port base: 43
    operations supported: PutImage 
    supported visuals:
      depth 16, visualID 0x22
      depth 16, visualID 0x23
    number of attributes: 5
      "XV_COLORKEY" (range 0 to 16777215)
              client settable attribute
              client gettable attribute (current value is 2110)
      "XV_BRIGHTNESS" (range -128 to 127)
              client settable attribute
              client gettable attribute (current value is 0)
      "XV_CONTRAST" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_SATURATION" (range 0 to 255)
              client settable attribute
              client gettable attribute (current value is 128)
      "XV_HUE" (range -180 to 180)
              client settable attribute
              client gettable attribute (current value is 0)
    maximum XvImage size: 1024 x 1024
    Number of image formats: 7
      id: 0x32595559 (YUY2)
        guid: 59555932-0000-0010-8000-00aa00389b71
        bits per pixel: 16
        number of planes: 1
        type: YUV (packed)
      id: 0x32315659 (YV12)
        guid: 59563132-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x30323449 (I420)
        guid: 49343230-0000-0010-8000-00aa00389b71
        bits per pixel: 12
        number of planes: 3
        type: YUV (planar)
      id: 0x36315652 (RV16)
        guid: 52563135-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x3e0, 0x7c00
      id: 0x35315652 (RV15)
        guid: 52563136-0000-0000-0000-000000000000
        bits per pixel: 16
        number of planes: 1
        type: RGB (packed)
        depth: 0
        red, green, blue masks: 0x1f, 0x7e0, 0xf800
      id: 0x31313259 (Y211)
        guid: 59323131-0000-0010-8000-00aa00389b71
        bits per pixel: 6
        number of planes: 3
        type: YUV (packed)
      id: 0x0
        guid: 00000000-0000-0000-0000-000000000000
        bits per pixel: 0
        number of planes: 0
        type: RGB (packed)
        depth: 1
        red, green, blue masks: 0x0, 0x0, 0x0

Имайте в предвид, че изброените формати (YUV2, YUV12 и т.н.) не са налични във всяка интерпретация на XVideo и тяхното отсъствие може да затрудни някои програми.

Ако получите нещо подобно на:

X-Video Extension version 2.2
screen #0
no adaptors present

Тогава XVideo вероятно не се подържа от картата ви.

Ако XVideo не се поддържа от вашата карта, това означава само, че ще бъде по-трудно да поемете изчислителните нужди на видеобработката. В зависимост от картата и процесора ви, обаче ще може да постигнете задоволителен резултат. Трябва да прочетете как да подобрите производителността в четивото за напреднали Section 16.4.3.

16.4.1.2. Simple Directmedia Layer

Simple Directmedia Layer, SDL, бе предназначен да бъде съвместим с Microsoft® Windows®, BeOS и UNIX®, позволявайки писането на ефективни мултиплатформени програми за аудио и видео. SDL осигурява режим на достъп от ниско ниво до хардуера което понякога е по-ефективно от Х.

SDL се намира в devel/sdl12

16.4.1.3. Direct Graphics Access

Direct Graphics Access е XFree86 разширение, ползоволяващо на програмите да прескочат X server и директно да променят фреймбуфера. Понеже разчита на разпределение на паметта от ниско ниво, за постигане на този ефект,програмите които го ползват трябва да бъдат стартирани с root права.

DGA разширението може да бъде тествано с помощта на dga(1). Когато dga върви, тя сменя цветовете на екрана при натискане на клавиш. За излизане от нея, използвайте q.

16.4.2. Портове и пакети, свързани с видео обработка

Този раздел обсъжда софтуера наличен от FreeBSD порт колекцията, който може да бъде използван за гледане на видео. Възпроизвеждането на видео е много активна зона от софтуерната разработка. В ъзможностите на различните програми са склонни да се отклоняват от описаното тук.

Първо, важно е да се знае че повечето от видео приложенията под FreeBSD бяха разработени за Linux. Много от тях са още с качество на бета-софтуер. Някои от проблемите, които може да срещнете с видео пакетите за FreeBSD включват :

  1. Програма не може да възпроизведе файл, създаден от друга програма.

  2. Програмата не може да възпроизведе файла, който тя е създала.

  3. Същата програма на две машини,компилирана за всяка една от тях, дава различно качество на възпроизводство.

  4. На пръв поглед, прост филтър за мащабиране на образа дава ужасен резултат, поради лошо написан режим на мащабиране.

  5. Програмата терминира, оставяйки след себе си файл със отпечатъка си в паметта (core dump).

  6. Документацията не е инсталирана с порта и може да се открие или на уеб сайта или в директорията на порта work.

Много от тези програми съдържат в себе си ``Linux-изми''. Накратко: при писането им са използвани някои стандартни библиотеки в Linux дистрибуциите или някои характеристики на Linux ядрото, които са считани от авторите им за стандартни. Въпросните кусури не винаги се забелязват от хората, подържащи портовете и могат да доведат до проблеми като тези:

  1. Употребата на /proc/cpuinfo за откриване на характеристиките на процесора.

  2. Неправилна употреба на нишките, причиняващо зависване на програмата при изход, вместо наистина да приключи.

  3. Софтуеърът с който е свързано приложението още не е във FreeBSD Ports колекцията.

Засега въпросните разработничици съдействат на хората подържащи порт колекцията, с цел минимизиране на неприятностите по портването.

16.4.2.1. MPlayer

MPlayer e скоро разработен и бързо развиващ се видео плейър. Целите на MPlayer екипа са скорост и гъвкавост на Linux и други Uniх варианти. Проектът е стартирал, когато основателят му се вбесил от лошата производителност на наличните програми. Някои биха казали, че графичният интерфейс е пожертван за сметка на праволинейния дизайн. Веднъж обаче, щом свикнете с опциите за команден ред, работи много добре.

16.4.2.1.1. Компилиране на MPlayer

MPlayer се намира вmultimedia/mplayer. MPlayer извършва редица хардуерни проверки по време на компилирането, като крайният резултат е файл, който е несъвместим с други системи. Ето защо е важно да ползвате портове, а не пакети. В допълнение, доста опции могат да се укажат на make, както е описано в началото на компилацията.

# cd /usr/ports/multimedia/mplayer
# make
You can enable additional compilation optimizations
by defining WITH_OPTIMIZED_CFLAGS
You can enable GTK GUI by defining WITH_GUI.
You can enable DVD support by defining WITH_DVD.
You can enable SVGALIB support by defining WITH_SVGALIB.
You can enable VORBIS sound support by defining WITH_VORBIS.
You can enable XAnim DLL support by defining WITH_XANIM.

Ако имате инсталирано x11-toolkits/gtk12, можете да пуснете и графичен интерфейс (GUI). Иначе не си струва усилията. Ако възнамерявате да гледате (вероятно CSS кодирани) DVD дискове с MPlayer трябва да укажете DVD подръжката тук. [2].Някои разумни опции са:

# make WITH_DVD=yes WITH_SVGALIB=yes

По време на написването, MPlayer портът ще изгради неговата си HTML документация и един изпълним файл - mplayer. Може да му бъде указано да компилира енкодер, mencoder, който е инструмент за преобразуване на видеоформати. Промяна в Makefile може да го изгради. Може би ще бъде разрешен в по-следващите версии на порта.

HTML документацията за MPlayer е много изчерпателна. Ако читателят намира информачията за видео хардуер и интерфейси за постна,MPlayer документацията е много детайлна добавка. Определено трябва да отделите време и да прочетете документацията към MPlayer, ако търсите информация за подръжката на видео в UNIX.

16.4.2.1.2. Използване на MPlayer

Всеки потребител на MPlayer трябва да създаде .mplayer поддиректория в неговата домашна директория. За да създадете нужната поддиректория, можете да напишете следното:

% cd /usr/ports/multimedia/mplayer
% make install-user

Параметрите подавани на mplayer са описани в страницата от наръчника. За по-подробна информация има HTML документация. В тази част, ние ще опишем само често използваните опции.

За да гледате файл, като testfile.avi, през различните видео интерфейси, настройте -vo параметъра:

% mplayer -vo xv testfile.avi
% mplayer -vo sdl testfile.avi
% mplayer -vo x11 testfile.avi
# mplayer -vo dga testfile.avi
# mplayer -vo 'sdl:dga' testfile.avi

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

За да гледате DVD, заменете testfile.avi с -dvd <N> DEVICE където <N> и номера на заглавието, което искате да гледате и DEVICE и устройството за DVD-ROM. Например, за да гледате 3-ти филм от /dev/dvd:

# mplayer -vo dga -dvd 2 /dev/dvd

За да спрете, направите пауза, преместите напред и т.н., прочетете изхода от mplayer -h или прочете страницата от наръчника за mplayer.

Допълнителни вожни опции за гледане са: -fs -zoom, която извиква гледането на пълен екран и -framedrop, която помага на представянето.

Ако не искате реда с опции към mplayer да не е прекалено дълъг, можете да създадете файл .mplayer/config и укажете вашите опции там:

vo=xv
fs=yes
zoom=yes

Накрая, mplayer може да се ползва за извличане на DVD заглавия в .vob файл. За извличане на втория филм от DVD, напишете:

# mplayer -dumpstream -dumpfile out.vob -dvd 2 /dev/dvd

Изходният файлout.vob е в MPEG формат и може да бъде обработван от другите програми описани в този раздел.

16.4.2.1.3. mencoder

Ако изберете да инсталиратеmencoder, когато компилирате MPlayer, имайте в предвид, че това е още експериментален компонент. Добра идея е да се запознаете с неговите опции от HTML документацията, преди да го ползвате. Има помощна страница, но тя не е много полезна без HTML документацията. Има безброй начини за повишаване на качеството, намалите битрейта, смените форматите. Някои от тези трикове може да са разликата между добро и лошо представяне. Ето няколко примера, които да ви вкарат в играта. Първо, просто копиране:

% mencoder input.avi -oac copy -ovc copy -o output.avi

Неточни комбинации на параметрите могат да дадат изходни файлове, които са невъпроизводими дори от самия mplayer. Така че, ако искате само да извлечете файл, придържайте се към -dumpfile в mplayer.

За да преобразувате input.avi в MPEG4 с MPEG3 аудио (нужен е audio/lame):

% mencoder input.avi -oac mp3lame -lameopts br=192 \
     -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi

Изходният файл може да се гледа отmplayer и xine.

input.avi може да се смени с -dvd 1 /dev/dvd и стартирано като root да преобразува DVD филм директно. Понеже е вероятно да не сте доволен първия път с постигнатото, препоръчва се да използвате изходен файл и да работите с него.

16.4.2.2. Xine

Видеоплейърът xine е проект с широк обхват, целящ да бъде не само ``всичко в едно'' по отношение на видеото, а също да произвежда използваема базова библиотека и модулен изпълним файл, чийто възможности могат да се разширят с плъгини. Наличен е и като пакет, и порт multimedia/xine.

Xine още не е доизпипан, но има добър старт. На практика, xine иска или бърз процесор с бърза карта или поддръжка на XVideo. GUI-то е използваемо, но тромаво.

По време на писането, няма входящи модули доставяни с xine, които да разкодират CSS кодирани DVD носители. Има билдове на трети лица, които имат тези модули, но нито една от тях е във FreeBSD Ports Collection.

Сравнен с MPlayer, xine дава повече на потребителите, но в същото време отнема част от фините настройки. Xine се представя най-добре на карти с XVideo подръжка.

По подразбиране xine ще стартира в графичен режим. Менютата могат са бъдат използвани за отварянето на определен файл:

% xine

Алтернативно, може да бъде извикан да покаже файл незабавно без графичния режим с командата:

% xine -g -p mymovie.avi

16.4.2.3. Програмките transcode

transcode е набор от инструменти за преобразуване на .avi и .mpg файлове. С transcode, вие имате възможността да сливате и поправяте видео файлове, използвайки инструменти за команден ред със stdin/stdout поточни интерфейси.

Подобно на MPlayer, transcode е много експериментален софтуер, който трябва да бъде изграден от порта multimedia/transcode. Ползва много опции при компилиране с make.Аз препоръчвам:

# make WITH_LIBMPEG2=yes

Ако възнамеряване да ползвате multimedia/avifile, тогава добавете WITH_AVIFILE към make командния ред, както е показано по-долу:

# make WITH_AVIFILE=yes WITH_LIBMPEG2=yes

Ето два примера за употреба на transcode за преобразуване на видео. Първият пример преобразува в openDIVX AVI файл, докато вторият кодира в MPEG.

% transcode -i input.vob -x vob -V -Z 320x240 \
-y opendivx -N 0x55 -o output.avi
% transcode -i input.vob -x vob -V -Z 320x240 \
-y mpeg -N 0x55 -o output.tmp
% tcmplex -o output.mpg -i output.tmp.m1v -p output.tmp.mpa -m 1

Има помощна страница за transcode, но документацията за отделните tc* програми (като tcmplex) е малко. С опция -h обаче, винаги можете да получите бърза инструкция как да работите.

Сравнявайкиtranscode с mencoder, transcode върви по-бавно, но с по-голяма вероятност да произведе читав файл. MPEG-ците създадени от transcode са били пускани на Windows Media® Player и Quicktime® на Apple.

16.4.3. Допълнително четиво

Видео приложенията за FreeBSD се развиват бързо. Твързе възможно е в близко бъдеще, много от споменатите проблеми да бъдат решени.Междувременно, тези които искат да вземат най-доброто от A/В възможностите на FreeBSD ще трябва да съберат познанието от няколкото налични FAQ-а, помагала и да ползват няколко различни приложения. Този раздел съществува да даде насоки на читателите за такава допълнителна информация.

MPlayer документацията е богата на техническа информация. Тя е препоръчителна за всеки, желаещ да придобие големи познания с видео под UNIX. MPlayer пощенският списък е враждебен към всеки, който не си е направил труда да прочете документацията, така че ако възнамерявате да докладвате за грешки, RTFM.

xine HOWTO съдържа глава относно подобряване на представянето, обща за всички програми.

Накрая има някои обещаващи приложения, които може да пробвате:

Notes

[1]

nVidia е популярна марка карти с добра производителност под XFree86, която още не е дала своите спецификации за XVideo подръжка на екипа разработващ XFree86. Ще мине известно време преди XFree86 напълно да подържа XVideo за тези карти.

[2]

Неправомерното гледане на DVD е сериозно престъплиние в нясои страни. Проверете местните закони преди да активирате тази опция.

Този и други документи можете да намерите в ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

За въпроси относно FreeBSD, прочетете документацията преди да попитате в <questions@FreeBSD.org>.
За въпроси относно този документ, e-mail <doc@FreeBSD.org>.