Последнее изменение файла: 2003.03.08
Скопировано с www.bog.pp.ru: 2003.03.11

Программы для работы с видео в Linux.

Порядок установки программ и предварительная установка необходимых пакетов из дистрибутива (в т.ч. *-devel) очень важны, т.к. при сборке скрипты ./configure проверяют наличие необходимых для реализации части функций библиотек и, если библиотека отсутствует, то собранная программа не будет иметь соответствующих функций. Например, если перед установкой mplayer не установить пакет работы с пультом ДУ Lirc, то mplayer будет собран без возможности управления с пульта ДУ. Внимательно следите за сообщениями, выдаваемыми ./configure!

Предварительные действия:

  1. установка Red Hat Linux 8.0 (со всеми указанными библиотеками!)
  2. установить видеодрайвер (например, для видеокарт NVidia требуется модуль ядра и библиотеки OpenGL - здесь будет ссылка на процедуру установки)
  3. добавить /usr/local/lib в /etc/ld.so.config и сделать ldconfig (запуск ldconfig необходимо повторять после установки каждой разделяемой библиотеки, т.к. некоторые разработчики забывают вставить соответствующую строчку в процедуру установки)
  4. установить драйвера платы видеозахвата и ТВ тюнера (v4l)
  5. установить программы для работы с пультом ДУ (lirc)
  6. установить программы работы со сканером (sane, xsane)
  7. иногда предлагается добавить загрузку v4l (/usr/X11R6/lib/modules/drivers/linux/v4l_drv) в секцию модулей /etc/X11/XF86Config, но я разницы не заметил

Теперь устанавливаем по порядку (естественно, надо стараться брать самые свежие версии, но возможны конфликты между пакетами и используемыми библиотеками):

  1. lame
  2. bbtool
  3. mpgtx
  4. divx4linux
  5. XviD
  6. libfame
  7. libdv
  8. avifile
  9. lzo
  10. mjpegtools
  11. transcode
  12. mpeg2dec
  13. libdvdnav
  14. libmad
  15. libsndfile
  16. faad2
  17. ogle
  18. xanim
  19. tvtime
  20. xawtv
  21. xine
  22. mplayer

Для просмотра DVD-Video я использую ogle, для просмотра ТВ - tvtime или xawtv, для всех прочих источников - mplayer, для видеозахвата - streamer из xawtv (в формате YUV4MPEG2), для обработки и сжатия - mjpegtools или mencoder из mplayer и lame (MPEG-1 с нестандартными параметрами, звук - MP3; в дальнейшем записывается в формате псевдо VCD с использованием vcdimager).

lame

Пакет lame 3.92 предоставляет разделяемую библиотеку для кодирования звука в формате MPEG-1 Layer 3 (CBR, VBR, ABR), а также программу для кодирования файлов из форматов PCM (.wav), MP1, MP2 или MP3. Позволяет использовать некоторые фильтры и преобразования звука перед сжатием.

Установка:

  • получить и развернуть исходные тексты (или здесь)
  • ./configure --enable-mp3x
  • make
  • make install
    • /usr/local/lib/libmp3lame.la
    • /usr/local/lib/libmp3lame.so.0.0.0
    • /usr/local/lib/libmp3lame.so.0
    • /usr/local/lib/libmp3lame.so
    • /usr/local/lib/libmp3lame.a
    • /usr/local/bin/lame
    • /usr/local/bin/mp3x (строит большое количество красивых графиков)
    • /usr/local/share/doc/lame
    • /usr/local/man/man1/lame.1

Простейшие способы применения:

  • lame -b 128 -h имя.wav имя.mp3 (кодирование с хорошим качеством, 128 kbps)
  • lame --abr 128 -b 96 -B 256 -h имя.wav имя.mp3 (кодирование с хорошим качеством, ABR, средний поток 128 kbps)
  • lame --preset voice имя.wav имя.mp3 (кодирование с качеством достаточным для голоса, 56 kbps)
  • lame --preset studio имя.wav имя.mp3 (кодирование студийного качества, 256 kbps)
  • lame --preset longhelp (выдать список избранных установок)

bbtool

Пакет bbtool 1.9 позволяет получить подробную и очень подробную информацию о файлах форматов MPEG, включая файлы .vob (мне он помог понять, почему не показывается второй VideoCD, сделанный mjpegtools).

Установка:

Использование утилит:

  • bbdmux имя-файла [stream-id out-file] (демультиплексирует программные и транспортные потоки MPEG1 и MPEG2 или показывет их структуру)
  • bbinfo имя-файла verbose-level
  • bbainfo имя файла verbose-level
  • bbvinfo имя-файла verbose-level

mpgtx

Пакет mpgtx 1.3 позволяет демультиплексировать потоки MPEG1 (системные) и MPEG2 (программные и транспортные), разбивать их, а также элементарные аудио и видео потоки на части (по границам GOP) или сливать потоки в один, получение информации, редактирование меток (id3 tag) MPEG1 audio layer 3.

Установка:

  • получить и развернуть исходные тексты
  • ./configure
  • уменьшить оптимизацию с -O3 до -O2 (проблемы с gcc 3.2)
  • make

Использование утилит (в действительности, это ссылки на одну программу mpgtx):

  • mpgjoin (объединение потоков)
  • mpgsplit (разбиение потока)
  • mpginfo (получение информации о потоке)
  • mpgdemux (демультиплексирование потока)
  • tagmp3 (редактирование меток id3)

divx4linux

Поставляется в виде разделяемых библиотек для кодирования и декодирования файлов в формате DivX.

Я всегда с сомнением относился к этим ребятам, которые взяли входящие в состав стандарта MPEG4 (ISO/IEC 14496) исходные тексты (которые лежат в свободном доступе!) и, изображая таинственных "кул хацкеров", ограбивших MS, распространяют их исключительно в бинарном виде (коды действительно принадлежат MS, но их может взять любой на сайте ISO). При этом они несколько раз меняли формат данных, так что по мере распространения настоящего формата хранения MPEG4 будет трудно найти проигрыватель видеофильмов в формате DivX3. Кстати, если взять в качестве источника цифровое видео с DVD и закодировать его в формате MPEG1 со звуком в формате MP3 и ключевыми кадрами пореже (1/300 вместо обычных 1/15), то, записав его в виде VideoCD (это добавляет 15% емкости CD), можно получить качество сравнимое с DivX.

Установка:

  • получить divx4linux501-20020418 с сайта DivX
  • ./install.sh
    • /usr/local/lib/libdivxdecore.so
    • /usr/local/lib/libdivxencore.so
    • /usr/local/include/decore.h
    • /usr/local/include/encore2.h

XviD

XviD 0.9 представляет собой реализацию библиотек DivX с открытыми исходными текстами (которые некоторые "солидные" изготовители программ и оборудования для обработки видео тихонечко включают в свои системы)

Установка:

  • получить и развернуть исходные тексты xvidcore-0.9.0.tar
  • зайти в build/generic
  • скопировать Makefile.linuxx86 в Makefile и отредактировать
  • make
  • make install
  • скопировать src/divx4.h и src/xvid.h в /usr/local/include (после этого mplayer собирается с xvid вместо divx4linux)

libfame

Библиотека libfame 0.9.0 (fame, recmpeg, fast assembler mpeg encoder) представляет собой ускоренный кодировщик видео MPEG-1 и MPEG-4

Установка:

  • получить и развернуть исходные тексты
  • ./configure --enable-sse
  • make
  • make install
    • /usr/local/man/man3/fame*
    • /usr/local/lib/libfame*
    • /usr/local/include/fame*
    • /usr/local/bin/libfame-config
    • /usr/local/share/aclocal/libfame.m4
  • ldconfig

libdv

Библиотека libdv 0.99 предоставляет библиотеку для кодирования и декодирования видео в формате DV (видеокамеры с интерфейсом IEEE 1394, Firewire, iLink), включая примеры использования playdv и encodedv

Установка:

avifile

Пакет avifile 0.7.27-20030122 предоставляет библиотеку для чтения и разборки AVI (ASF, WMP) файлов, а также некоторый набор использующих ее утилит. В качестве кодеков в некоторых случаях используются исполняемые DLL файлы, предназначенные для Win32. Я использую только библиотеки (для сборки других пакетов) и avitype (я уже отвык от программ без документации и ключа --help).

Установка:

  • создать и заполнить /usr/lib/win32 (у меня сложилась исторически и содержит файлы .dll, .acm, .qtx, .ax, .drv, .vmp, .xa и даже разделяемых библиотек .so; откуда что взялось и кому нужно понять невозможно, поэтому таскаю с собой все, что есть; для начала можно взять с сайта пакета avifile; затем дополнить при установке пакетов xine и mplayer)
  • получить и развернуть исходные тексты
  • ./configure --enable-x86opt
  • make
  • make install
    • /usr/local/lib/avifile0.7/ (подгружаемые библиотеки с кодеками)
    • /usr/local/lib/libaviplay*
    • /usr/local/lib/libqavm*
    • /usr/local/share/avifile0.7/ (картинки для aviplay)
    • /usr/local/man/man1/aviplay.1
    • /usr/local/include/avifile/
    • /usr/local/bin/:
      • aviplay (показать видео, может использоваться XVideo, OpenGL, SDL)
      • avibench (измерение производительности процессора и видеосистемы на примере)
      • avicat (вырезание кусков и слияние AVI файлов)
      • avitype (получение информации о видео)
      • avimake (изготовление AVI файла (DIVX) из последовательности JPEG)
      • kv4lsetup
      • avirec
      • avicap
      • avirecompress
      • avifile-config

lzo

Библиотека lzo 1.08 предоставляет целый набор алгоритмов сжатия без потерь. Среди них попадаются такие, что сжимают YUV на 25% со скоростью 35 МБ/сек и декомпрессируют со скоростью 250 МБ/сек (скорость memcpy() при переполнении кеша всего вдвое больше!). Наверняка, с помощью простейшего алгоритма предсказания (db-a) можно довести коэффициент сжатия до 50% без особой потери скорости сжатия (скорость декомпрессии упадет сильно). Прямой конкурент zlib, если требуется большая скорость.

Установка:

  • получить и развернуть исходные тексты
  • ./configure --enable-shared
  • make
  • make check
  • make test
  • make install
    • /usr/local/include/lzo*.h
    • /usr/local/lib/liblzo*

mjpegtools

Пакет mjpegtools 1.6.1 предоставляет средства для захвата видео в форматах MJPEG и YUV (YUV4MPEG, в новых версиях YUV4MPEG2), утилиты преобразования форматов и фильтрации видео, сжатие в MJPEG, MPEG-1 и MPEG-2, в т.ч. в виде, подходящем для записи на VideoCD и SVCD (включая галереи неподвижных изображений), MPEG-4 (DivX). Форматы YUV4MPEG и YUV4MPEG2 поддерживаются многими другими пакетами. Теоретически также позволяет редактировать видео (включая переходы), но в пакетном режиме, что удобным не назовешь. В основном, использую для удаления шума (yuvdenoise очень хорош), обрезки кадров (yuvscaler очень быстр) и сжатия MPEG (поддерживает все ограничения аппаратных проигрывателей и неподвижные изображения для VideoCD/SVCD). Для программирования и записи на CD можно использовать vcdimager.

Установка:

  • получить и развернуть в отдельную директорию исходные тексты jpeg-mmx-0.1.4.tar.gz, перейти в нее
  • ./configure
  • make (не устанавливать!)
  • получить и развернуть в отдельную директорию исходные тексты libmovtar-0.1.3.tar.gz, перейти в нее
  • ./configure --with-jpeg-mmx=директория-jpeg-mmx-0.1.4
  • make (не устанавливать!)
  • получить и развернуть в отдельную директорию исходные тексты quicktime4linux-1.4-patched-2.tar.gz, перейти в нее
  • ./configure --use-dv --use-firewire
  • make (не устанавливать!)
  • получить и развернуть в отдельную директорию исходные тексты mjpegtools-1.6.1.tar.gz, перейти в нее
  • сделал небольшие правки (показаны относительно версии 1.6.0)
    • добавил в mpeg2enc/mpeg2enc.c ключ -m (--bgroup) для задания param_Bgrp_size (количество B-фреймов между I/P + 1); при использовании ключ -g должен быть строго больше -m (--bgroup); mplayer, xine и xmovie показывают такие файлы
      644a647,649
      >      { "bgroup",          1, 0, 'm' },
      895a901,905
      >               case 'm' :
      >                       param_Bgrp_size = atoi(optarg);
      >                       break;
      1250c1260
      <       mjpeg_info( "GOP SIZE RANGE %d TO %d", ctl_N_min, ctl_N_max );
      ---
      >       mjpeg_info( "GOP SIZE RANGE %d TO %d, BGROUP %d", ctl_N_min, ctl_N_max, param_Bgrp_size );
      
    • сделал отступление от стандарта MPEG-2 ML@MP в mpeg2enc/conform.c - увеличил максимальный размер по горизонтали с 720 до 768 пикселей
      <   {8, 5,  720,  576, 10368000, 15, 112}, /* ML */
      ---
      >   {8, 5,  768,  576, 10368000, 15, 112}, /* ML */
      
    • попытался превратить параметр -q в mpeg2enc/mpeg2enc.c из целого в плавающее число, но он округляется где-то внутри до четного целого для MPEG-1 и целого для MPEG-2
      88c88,90
      < static int param_quant      = 0;
      ---
      > static float param_quant = 0.0;
      308,309c310,311
      <               if( param_quant == 0 )
      <                       param_quant = 8;
      ---
      >               if( param_quant == 0.0 )
      >                       param_quant = 8.0;
      370c372
      <               param_quant = 0;                /* We want to try and hit our size target */
      ---
      >               param_quant = 0.0;              /* We want to try and hit our size target */
      434,435c436,437
      <               if( param_quant == 0 )
      <                       param_quant = 8;
      ---
      >               if( param_quant == 0.0 )
      >                       param_quant = 8.0;
      722,723c727,728
      <                       param_quant = atoi(optarg);
      <                       if(param_quant<1 || param_quant>32)
      ---
      >                       param_quant = atof(optarg);
      >                       if(param_quant<1.0 || param_quant>32.0)
      983,984c993,994
      <       if(param_quant)
      <               mjpeg_info("Quality factor: %d (1=best, 31=worst)",param_quant);
      ---
      >       if(param_quant != 0.0)
      >               mjpeg_info("Quality factor: %f (1=best, 31=worst)",param_quant);
      1306c1316
      <       if( param_quant )
      ---
      >       if( param_quant != 0.0)
      
  • ./configure --with-movtar-prefix=директория-libmovtar-0.1.3 --with-movtar-exec-prefix=директория-libmovtar-0.1.3 --with-jpeg-mmx=директория-jpeg-mmx-0.1.4 --with-quicktime=директория-quicktime4linux-1.4-patch --enable-large-file --enable-cmov-extensions --enable-simd-accel
  • поправить флаги для movtar в Makefile и lavtools/Makefile
      MOVTAR_CFLAGS = -I директория-libmovtar-0.1.3
      MOVTAR_CONFIG = директория-libmovtar-0.1.3
      MOVTAR_LIBS = -Lдиректория-libmovtar-0.1.3 -lmovtar
    
  • make clean
  • make
  • make install
    • /usr/local/lib/libmjpegutils.a
    • /usr/local/lib/liblavfile*
    • /usr/local/lib/liblavjpeg*
    • /usr/local/lib/liblavrec*
    • /usr/local/lib/liblavplay*
    • /usr/local/lib/pkgconfig/mjpegtools.pc
    • /usr/local/include/mjpegtools: yuv4mpeg.h, mpegconsts.h, mjpeg_logging.h, mjpeg_types.h, mpegtimecode.h, editlist.h, lav_io.h, jpegutils.h, frequencies.h, liblavrec.h, liblavplay.h, audiolib.h
    • /usr/local/bin/
      • lavrec (запись в форматах .avi, .qt, .movtar со сжатием MJPEG с соответствующего аппаратного устройства или обычного video4linux, например на основе Bt848/Bt878 с помощью программного сжатия)
      • testrec (тестовая программа записи звука)
      • lavvideo (тестовая программа захвата с v4l)
      • lavinfo (информация об изображении и звуке)
      • lavplay (проигрывание записей в форматах .avi, .qt, .movtar со сжатием MJPEG на аппаратуре типа Zoran, DC10 или программно (SDL), позволяет создавать edit list для последующего использования)
      • glav (простейший графический создаватель edit list на уровне cut/paste; команды см. README.glav)
      • lavtrans (преобразует записи со сжатием MJPEG из одного формата в другой, позволяет также конструировать новую запись используя edit list)
      • lav2wav (извлекает звук в формате WAV из записей в форматах .avi, .qt, .movtar со сжатием MJPEG или edit list)
      • lavaddwav (добавить WAV к AVI или QT)
      • lav2yuv (преобразование записей в форматах .avi, .qt, .movtar со сжатием MJPEG или edit list в формат YUV4MPEG2)
      • yuv2lav (преобразование из формата YUV4MPEG2 в записи в форматах .avi, .qt, .movtar со сжатием MJPEG)
      • jpeg2yuv (преобразование последовательности JPEG в YUV4MPEG2)
      • yuvplay (проигрывание записей в формате YUV4MPEG2, используется SDL)
      • ppmtoy4m (преобразование последовательности PPM в YUV4MPEG2)
      • y4mtoppm (преобразование из YUV4MPEG2 в последовательность PPM, потребуется также pnmsplit)
      • y4mcolorbars (создает тестовый шаблон в формате YUV4MPEG2)
      • ypipe (какая-то тестовая программа)
      • lavpipe (комбинирует несколько источников видео с использованием фильтров и скрипта pipe list в YUV4MPEG2; см. также README.lavpipe; кстати, во времена СССР за умение писать осмысленные pipe list давали государственную премию ;)
      • lav2divx (преобразование записей в форматах .avi, .qt, .movtar со сжатием MJPEG или edit list в формат AVI со сжатием DivX; используется пакет avifile; ключ --encoder позволяет использовать любой кодек этого пакета)
      • yuv2divx (преобразование из YUV4MPEG2 с добавлением звука в формат AVI со сжатием DivX; используется пакет avifile; ключ --encoder позволяет использовать любой кодек этого пакета)
      • divxdec (преобразование AVI файла, понимаемого пакетом avifile в формат YUV4MPEG2, .avi, .qt, .movtar со сжатием MJPEG или WAV)
      • mp2enc (преобразование звука из WAV (PCM) в MPEG-2 layer-II, для получения MP3 используйте lame)
      • mpeg2enc (преобразование из YUV4MPEG2 в формат видео MPEG-1 (ES) или MPEG-2 (PES) с соблюдением профилей VideoCD и SVCD, в т.ч. неподвижные изображения; позволяет делать пометки для дальнейшей разрезки на отдельные CD)
      • mplex (объединение элементарных аудио (MP2, MP3, AC3) и видео потоков MPEG-1/MPEG-2 в программный/системный поток с соблюдением профилей VideoCD и SVCD; разрезает получившийся поток на отдельные CD)
      • lav2mpeg (скрипт для преобразования записей в форматах .avi, .qt, .movtar со сжатием MJPEG или edit list в VCD/SVCD/MPEG-1/MPEG-2 с удалением шумов и масштабированием; лучше выбирать параметры отдельных программ самому, если, конечно, важен результат)
      • mpegtranscode (недоделанный скрипт для преобразования MPEG в формат, совместимый с VCD/SVCD)
      • yuvscaler (быстрое масштабирование YUV4MPEG2 потока, обрезание кадров, преобразование форматов кадра 16:9 и 4:3, смена порядка полей, изменение порядка строк, подгонка под VCD или SVCD)
      • yuvdenoise (подавитель шумов YUV4MPEG2 потока с использованием похожести соседних кадров и компенсацией движения; распознает черную кайму вокруг изображения и подавляет эффект чересстрочного изображения)
      • yuvmedianfilter (простенький подавитель шумов YUV4MPEG2 потока путем размазывания мусора (не всей картинки!) по окрестностям)
      • yuvycsnoise (подавлением шумов YUV4MPEG2 потока, внесенных некачественным NTSC Y/C разделителем)
      • yuvkineco (восстановление фильмов в формате YUV4MPEG2 потока, покуроченных преобразованием pulldown 2-3 (преобразование прогрессивного фильма в чересстрочный NTSC удвоением каждого пятого поля); частота кадров результата д.б. 23.97 fps, иначе придется вставлять дублирующие кадры)
      • transist.flt (фильтр - переход от одного видео к другому)
      • matteblend.flt (фильтр - смешивание по альфа каналу)
      • multiblend.flt (фильтр - смешивание 2 видеопотоков различными способами)
    • /usr/local/man/man1: mjpegtools.1 и отдельные тексты для каждой программы
  • вытереть трудовой пот

Рассмотрим некоторые способы применения пакета (у меня накопился большой экспериментальный материал по mjpegtools, но я выложу его отдельно позднее). В примерах используются программы streamer из xawtv и lame.

Захват 10-секундного тестового отрезка с SVHS видеомагнитофона со сжатием MJPEG в формате AVI и преобразование его в MPEG-1 (мощности P4 2400 достаточно для захвата полного кадра и еще немного остается):

streamer -r 25 -s 384x288 -t 0:10 -n pal -i S-Video -f mjpeg -F stereo -o test.avi
lav2yuv test.avi | mpeg2enc -o video.m1v
lav2wav test.avi | mp2enc -o audio.mp2
mplex audio.mp2 video.m1v -o movie.mpg

Захват отдельно видео в формате YUV4MPEG2 и звука в WAV, удаление чересстрочной развертки (deinterlace в yuvdenoise включается ключом -F, в документации ошибка) и преобразование в MPEG-1:

streamer -q -r 25 -s 768x576 -t 3:00 -n pal -i S-Video -F stereo -o testbig.yuv -O audio.wav
mp2enc -o audio.mp2 < audio.wav
yuvdenoise -F -f < testbig.yuv | mpeg2enc -o video.m1v
mplex audio.mp2 video.m1v -o testbigdei.mpg

Подавление шума для того же видеофрагмента, уменьшение размера кадра под ограничения MPEG-2 MP@ML и преобразование в MPEG-2 для нестандартного SVCD:

yuvdenoise -F < testbig.yuv | yuvscaler -M RATIO_1_1_1_1 -M BICUBIC -O SIZE_720x576 | \
      mpeg2enc -f 5 -V 200 -b 1152 -D 10 -o video.m2v
mplex -f 5 audio.mp2 video.m2v -o testbigdn.mpg

Получение MPEG-2 со звуковой дорожкой в формате MP3 (аппаратный проигрыватель не воспринимает такой набор, хотя умеет проигрывать MP3!):

lame -b 128 -h audio.wav > audio.mp3
mplex -f 4 video.m2v audio.mp3 -o testbigdn720m2mp3.mpg

Получение MPEG-2, готового для записи на SVCD:

cat testbigdn.yuv | yuvscaler -O SVCD |  mpeg2enc -f 4 -o video.m2v
mplex -f 4 video.m2v audio.mp2 -o testbigdn.svcd.mpg

Получение MPEG-1, готового для записи на VCD:

cat testbigdn.yuv | yuvscaler -O VCD |  mpeg2enc -f 1 -o video.m1v
mplex -f 1 video.m1v audio.mp2 -o testbigdn.vcd.mpg

Фильтр, который я использую для очень шумного источника, который надо сильно сжать (границы рамки подбираются отдельно для каждого фильма):

yuvscaler -I USE_736x496+16+36 -n p -M RATIO_1_1_1_1 -O SIZE_736x496 | \
   yuvdenoise -F -l 1 -t 8 -p 8 -S 100 | yuvmedianfilter -r 2 -t 2

Формат YUV4MPEG2

Формат yuv4mpeg (YUV4MPEG2, для mjpegtools версии 1.5 и выше) описывает только видео, звук должен храниться отдельно. Поток видеоданных состоит из заголовка потока и последовательности кадров.

Заголовок потока - текстовая строка "YUV4MPEG2 ", за которой следуют разделяемые пробелами поля. Завершается заголовок "\n". Поле состоит из односимвольного имени и подряд идущего значения:

  • W - ширина кадра в пикселях
  • H - высота кадра в пикселях
  • I - формат развертки:
    • p - прогрессивная
    • t - верхнее поле первым
    • b - нижнее поле первым
    • ? - формат развертки неизвестен
  • F - частота кадров в виде отношения числитель:знаменатель
  • A - геометрическое соотношение ширины пикселя (не кадра!) к высоте в виде отношения двух чисел
  • X - строка метаданных, не может содержать пробелы

Каждый кадр состоит из заголовка кадра и 3 байтовых массивов (planar CCIR-601 Y'CbCr 4:2:0) - отдельно яркость, отдельно Cb и Cr для нечетных точек нечетных строк. Строки полей при черезстрочном формате перемежаются в кадре. Размер кадра берется из заголовка потока.

Заголовок кадра - текстовая строка "FRAME ", за которой следуют разделяемые пробелами поля. Завершается заголовок "\n". Поле состоит из односимвольного имени и подряд идущего значения:

  • X - строка метаданных, не может содержать пробелы

Библиотека libmjpegutils содержит C функции для работы с потоками в формате YUV4MPEG2. Интерфейс описан в yuv4mpeg.h. Способ использования библиотеки легко понять из текста написанной мной утилиты yuvrange (-h - это help) для вырезки интервала кадров из потока YUV4MPEG2 (почему-то в составе пакета такой утилиты не нашлось). В этом же тексте можно увидеть и неправильный способ работы с потоком YUV4MPEG2 (опция получения разности потоков), не перепутайте ;).

Утилита yuvsplit (-h - это help) позволяет вырезать из потока YUV4MPEG2 отдельную цветовую плоскость в "сыром" формате для ее последующей обработки.

Утилита raw422toy4m (-h - это help) позволяет преобразовать "сырой" видеопоток в цветовом пространстве 4:2:2 planar (например, получается при захвате с помощью "streamer -f 422p ...") в поток YUV4MPEG2 с возможным преобразованием чересстрочной развертки в последовательность кадров с частотой 50 fps (-d, -i). Возможна выдача гистограммы (-v 2) и экспериментальный режим выравнивания начал строк развертки для плохих VHS записей (-s).

transcode

Пакет transcode 0.6.3 предоставляет множество фильтров для преобразования видеопотоков.

Установка:

  • поставить пакет bzip2-devel, который почему-то был пропущен при установке RH 8.0 (без него не распознается ImageMagick, кстати, необходим ImageMagick-devel)
  • заодно RH забыла включить в ImageMagick-devel файл api.h и все, что он за собой тянет
  • получить и развернуть исходные тексты
  • ./configure --enable-v4l
  • посмотреть на таблицу распознанных модулей - все ли подключилось
  • еще можно было бы обеспечить связку с модулями постобработки из пакета mplayer и qt
  • make
  • make install
    • /usr/local/share/doc/transcode/
    • /usr/local/man/man1: tccat.1, tcprobe.1, tcdemux.1, tcscan.1, tcextract.1, tcdecode.1, tcmodinfo.1, avisplit.1, avimerge.1, avifix.1, avisync.1
    • /usr/local/share/doc/transcode/html/
    • /usr/local/lib/transcode
      • libioaux*
      • import_nuv*, import_af6*, import_net*, import_v4l*, import_yuv*, import_avi*, import_mpeg2*, import_vdrac3*, import_ac3*, import_dv*, import_vob*, import_raw*, import_nvrec*, import_yuv4mpeg*, import_lav*, import_null*, import_divx*, import_mp3*, import_dvd*, import_im*, import_imlist*, af6_decore*, import_xml*, import_mplayer*, import_rawlist*, import_ogg*, import_xvid*, import_ffmpeg*, import_lzo*
      • export_null*, export_wav*, export_pcm*, export_af6*, export_raw*, export_divx4*, export_divx4raw*, export_divx5raw*, export_ppm*, export_divx5*, export_ffmpeg*, export_lame*, export_net*, export_dvraw*, export_dv*, export_mpeg*, export_yuv4mpeg*, export_mpeg2enc*, export_mp2enc*, export_fame*, export_im*, export_ogg*, export_toolame*, export_sampeg*, export_mjpeg*, export_jpg*, export_lzo*, export_xvid*, export_xvidcvs*, export_xvidraw*
      • filter_null*, filter_invert*, filter_32detect*, filter_32drop*, filter_yuy2toyv12*, filter_skip*, filter_astat*, filter_aclip*, filter_cut*, filter_cshift*, filter_mask*, filter_dnr*, filter_xsharpen*, filter_smartdeinter*, filter_normalize*, filter_testframe*, filter_fields*, filter_clone*, filter_videocore*, filter_tc_video*, filter_tc_audio*, filter_29to23*, filter_smooth*, filter_dilyuvmmx*, filter_logo*, filter_logoaway*, filter_divxkey*, filter_extsub*, filter_extsub2*, filter_resample*, filter_test*, filter_yuvdenoise*, filter_yuvmedian*, filter_decimate*, filter_ivtc*, filter_preview*, filter_pv*, filter_subtitler*
    • /usr/local/bin/
      • tcmplex
      • tcextract
      • tcdecode
      • tcscan
      • tcdemux
      • tccat
      • tcprobe
      • avimerge
      • avisplit
      • avifix
      • avisync
      • transcode
      • tcmodinfo

mpeg2dec

В состав пакета mpeg2dec 0.3.1 входила полезная утилита mpeg2toc, которая строила оглавление DVD. В текущей версии она пропала, так что взял из старой (исходников которой не осталось :( эту версию устанавливать не стал.

libdvdnav

Библиотека libdvdnav 0.1.3 (выделена из проекта xine) позволяет обращаться с меню на DVD.

Установка:

  • убедиться, что установлены пакеты libdvdread-devel и libdvdcss-devel
  • получить и развернуть исходные тексты
  • ./configure
  • make
  • make install

libmad

Библиотека libmad 0.14.2b декодирует звук из форматов MPEG-1 и MPEG-2, Layer 1, 2 и 3.

Установка:

  • получить и развернуть исходные тексты
  • ./configure --enable-shared --with-esd --enable-accuracy --enable-fpm=intel --enable-strict-iso
  • make
  • make install

libsndfile

Вспомогательная библиотека для работы со звуком libsndfile 1.0.3 используется в пакете FAAD.

Установка:

  • получить и развернуть исходные тексты
  • export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
  • ./configure
  • make
  • make install

faad2

Библиотека faad2 1.1 (FAAD, FAAC) предоставляет кодек звука MPEG-4 AAC (Dolby), профили: LC, MAIN, LTP.

Установка:

  • получить и развернуть исходные тексты
  • чтобы bootstrap не ругался, можно добавить в configure.in следующую строку:
    AM_CONFIG_HEADER(configtop.h)
    
  • ./bootstrap
  • ./configure
  • при переходе к новой версии libsndfile элемент samples в структуре SF_INFO (sndfile.h) переименовали во frames, а внести изменения в файл frontend/audio.c забыли, сделаем это за них
  • но это не поможет, т.к. при сборке frontend/.libs/faad будет выдано множество ошибок вида (--disable-shared при запуске ./configure не помогает; начинаю понимать, за что я не люблю C++ ;)
    ../common/mp4v2/.libs/libmp4v2.so: undefined reference to `operator new[](unsigned)'
    
  • поэтому удаляю всё в директории frontend и создаю там Makefile:
    all:
                echo empty
    install:
                echo empty
    
  • make
  • make install
    • /usr/local/lib/libfaad.la
    • /usr/local/lib/libfaad.so.0.0.0
    • /usr/local/lib/libfaad.so.0
    • /usr/local/lib/libfaad.so
    • /usr/local/lib/libfaad.a
    • /usr/local/include/faad.h
    • /usr/local/lib/libmp4v2.la
    • /usr/local/lib/libmp4v2.so.0.0.0
    • /usr/local/lib/libmp4v2.so.0
    • /usr/local/lib/libmp4v2.so
    • /usr/local/lib/libmp4v2.a (8 MB!)
  • после сборки mplayer необходимо убедиться, что он воспроизводит звук из файлов QT/mp4a, а то при таком количестве ошибок можно всего ожидать

ogle

Если все, что вам нужно - это просмотр DVD (VCD, SVCD), а обрабатывать видео вы и не собирались, то можете удалять все ранее описанные пакеты и не устанавливайте никаких новых, кроме ogle!

ogle 0.8.5 - маленький и простоустанавливаемый проигрыватель DVD. При этом в отличие от своих более "навороченных" собратьев (mplayer, xine, xmovie) он делает это хорошо: умеет обрабатывать меню диска (в том числе с помощью мышки), ускоренное и замедленное воспроизведение, автомагический выбор русской звуковой дорожки (и переключение на другую дорожку с первого раза и без щелчка!). Только с его помощью я увидел некоторые дополнения к фильмам. В комплекте идет программа ifo_dump Из недостатков я заметил всего два:

  • нет воспроизведения DTS (разработчик явно живет в Европе), функция появилась пока текст отлеживался!
  • выбор угла зрения (angle selection) возможен только из меню DVD (хотя кнопка уже припасена)

Программу потребительского класса лучше устанавливать из RPM

  • на всякий случай обновить (rpm -Fv) libdvdcss и libdvdread
  • rpm -iv ogle-0.9.0-ogle1.i586.rpm ogle-devel-0.9.0-ogle1.i586.rpm ogle_gui-0.9.0-ogle1.i386.rpm xvattr-1.3-ogle1.i386.rpm

xanim

xanim 2.80.2 (не развивается с 1999) позволяет просматривать (и перекодировать) видео в различных архаичных форматах (FLI/FLC, Indeo, Creative YUV, gif animated ;). Модули могут использоваться другими пакетами.

Установка из RPM

  • взять RPM отсюда, отсюда или отсюда
  • rpm -i xanim-2.80.2-5.i386.rpm
    • /usr/X11R6/bin/xanim
    • /usr/X11R6/lib/xanim/mods/vid_cvid_2.0_linuxELFx86g21.xa
    • /usr/X11R6/lib/xanim/mods/vid_cyuv_1.0_linuxELFx86g21.xa
    • /usr/X11R6/lib/xanim/mods/vid_h261_1.0_linuxELFx86g21.xa
    • /usr/X11R6/lib/xanim/mods/vid_h263_1.1_linuxELFx86g21.xa
    • /usr/X11R6/lib/xanim/mods/vid_iv32_2.1_linuxELFx86g21.xa
    • /usr/X11R6/lib/xanim/mods/vid_iv41_1.0_linuxELFx86g21.xa
    • /usr/X11R6/lib/xanim/mods/vid_iv50_1.0_linuxELFx86g21.xa
    • /usr/X11R6/man/man1/xanim.1x.gz
    • /usr/share/doc/xanim-2.80.2/

tvtime

tvtime имитирует телевизор на компьютере, выводя изображение на экран с частотой 50/60 Гц, снимая тем самым проблему с чересстрочным изображением. Для сборки требуются пакеты: audiofile-devel, esound-devel, qt-devel, SDL-devel, SDL_image-devel, SDL_mixer-devel, SDL_net-devel. Некоторые алгоритмы борьбы с чересстрочной разверткой требуют как минимум 4 буферов video4linux.

Раннюю версию tvtime 0.13.tar.gz можно использовать как учебное пособие для написания программ с интерфейсом video4linux (только в tvtime.c надо: поставить break при разборе ключа d; поменять ширину захвата с 720 на 768; добавить SECAM). Используется /dev/rtc, так что надо выполнять с правами root. Для установки параметров можно использовать v4lctl от xawtv.

Текущая версия tvtime 0.9.6 увеличилась с 13 кБ до 618 кБ (правда, половина это .png) и превратилась в полноценную программу со всеми рюшечками (0.9.7 - уже 3.8 MB, из них 2.8 MB - шрифты в формате FreeFont).

Установка:

  • получить и развернуть исходные тексты
  • ./configure
  • в src/Makefile в переменной XML2_FLAG убрать в конце подстроку libxml
  • make
  • make install
    • /usr/local/bin/tvtime
    • /usr/local/share/tvtime: menubg.png, testlogo.png, credits.png, FreeSansBold.ttf, FreeMono.ttf, FreeMonoBold.ttf, FreeMonoOblique.ttf, freefont-sfd.tar.gz (это лишнее!)
  • cp tvtime.1 /usr/local/man/man1/
  • cp tvtimerc.5 /usr/local/man/man5/
  • скопировать docs/default.tvtimerc в ~/.tvtime/tvtimerc и настроить его (самодокументирован)

Ключи запуска, перекрывающие ~/.tvtime/tvtimerc (для нормальной работы с таймером реального времени требуются права root; автор уверяет, что права сразу сбрасываются):

  • -w (ширина окна вывода)
  • -i (номер источника сигнала v4l, у меня: 0- тюнер, 1 - Composite, 2 - S-Video)
  • -m (вывести изображение на весь экран)
  • -n (PAL, NTSC, SECAM)
  • -D (алгоритм подавления чересстрочности)
  • -a (16:9)

Основные клавиши управления (можно переназначить или использовать lirc или записывать команды в ~/.tvtime/tvtimefifo)

  • f - вывести изображение на весь экран (обратно в RH 8.0 уже не вернуть ;)
  • a - 16:9 или 4:3
  • t - сменить алгоритм подавления чересстрочности (9 штук!)
  • i - смена источника сигнала (если нет звука, попереключайте источник)
  • c - коррекция яркости для Bt848/878
  • z/x - гамма-коррекция
  • F3/F4 - яркость
  • F5/F6 - контраст
  • F7/F8 - насыщенность
  • s - сохранить копию экрана
  • m - mute
  • +/- - громкость
  • стрелки влево/вправо - тонкая настройка частоты
  • стрелки вверх/вниз - смена канала
  • F10 - сканировать все каналы
  • левая клавиши мышки - показать текущие настройки

Часть документации доступна только на сайте.

xawtv

xawtv 3.83 предоставляет набор программ для управления видеоустройством video4linux, захвата видеопотока в файл в различных форматах или вывода его на экран, а также вспомогательные утилиты.

Установка:

  • получить и развернуть исходные тексты
  • ./configure --enable-xfree-ext --enable-xvideo --enable-lirc --enable-gl --enable-dv --enable-mmx
    при сборке с использованием Xvideo режим grabdisplay работает лишь при запуске xawtv с ключом -noxv
  • make
  • make install
    • /usr/local/bin: dump-mixers, record, showriff, showqt, streamer, webcam, radio, fbtv, v4l-info, v4l-conf, ntsc-cc, propwatch, v4lctl, xawtv-remote, rootv, xawtv, pia, motv
    • /usr/local/share/xawtv: частоты
    • /usr/local/lib/xawtv: flt-gamma.so, flt-invert.so, flt-disor.so, conv-mjpeg.so, conv-audio.so, read-avi.so, write-avi.so, read-dv.so, write-dv.so, drv0-v4l2.so, drv0-v4l2-old.so, drv1-v4l.so, snd-oss.so, flt-smooth.so, bilinear.so, cubic.so, linear-blend.so, linedoubler.so
    • /usr/local/man/man1/: dump-mixers.1, fbtv.1, motv.1, mtt.1 (teletext, самой программы нет), ntsc-cc.1, pia.1, propwatch.1, radio.1, record.1, rootv.1, scantv.1, showriff.1, streamer.1, ttv.1, v4lctl.1, webcam.1, xawtv.1, xawtv-remote.1
    • /usr/local/man/man5/xawtvrc.5
    • /usr/local/man/man8/v4l-conf.8
    • /usr/X11R6/lib/X11/app-defaults/Xawtv
    • /usr/X11R6/lib/X11/de/app-defaults/MoTV
    • /usr/X11R6/lib/X11/it/app-defaults/MoTV
    • /usr/X11R6/lib/X11/fr/app-defaults/MoTV
    • /usr/X11R6/lib/X11/de_DE.UTF-8/app-defaults/MoTV
    • /usr/X11R6/lib/X11/app-defaults/mtt
    • /usr/X11R6/lib/X11/app-defaults/MoTV
  • экранные шрифты устанавливаются отдельно
    • взять и развернуть tv-fonts-1.0.tar.bz2 в отдельную директорию
    • make
    • mkfontdir
    • xset fp+ "`pwd`:unscaled"
    • xset fp rehash
    • если понравилось, то добавить директорию к списку сервера шрифтов X11 (/etc/X11/xfs/config), чтобы было всегда, но я не понял зачем они нужны

v4lctl позволяет управлять устройством video4linux, что полезно не только для удаленного управления xawtv, но и для других пакетов, которые не имеют собственных средств управления устройством видеозахвата. Примеры

v4lctl setnorm SECAM
v4lctl color 50%
v4lctl bright 50%
v4lctl contrast 50%

Пример захвата видеопотока в формате YUV4MPEG2 для дальнейшей обработки mjpegtools (композитный вход, время записи - 1 минута, отдельная запись звука в PCM/WAV):

streamer -r 25 -s 768x576 -t 1:00 -n secam -i Composite1 -F stereo -o vhs.yuv -O vhs.wav

Пример захвата видеопотока в формате RAW 4:2:2 planar:

streamer -r 25 -s 768x576 -t 0:10 -n pal -i Composite1 -o 422p.raw -f 422p

Пример захвата видеопотока в формате AVI/MJPEG (streamer -h выдает список доступных для записи форматов):

streamer -d -r 25 -s 768x576 -t 90:00 -n pal -i S-Video -f mjpeg -F stereo -o fullmovie.avi

xine

Проигрыватель видео xine.

Установка:

  • получить и развернуть xine-lib-1-beta4.tar.gz (разделяемые библиотеки), перейти туда
  • ./configure (недостатки:
    • нужен nvtv для вывода на ТВ через видеокарту с Nvidia
    • не нашел OpenGL (пусть, все равно в состоянии алфа)
    • aalib (мне не нужен ascii art)
    • libFLAC?
    • хочет libdvdnav >= 0.1.4 (на сайте лежит только 0.1.3?!)
  • make
  • make install
    • /usr/local/man/man1: xine-config.1
    • /usr/local/share/doc/xine/faq: faq.html, faq.txt
    • /usr/local/share/doc/xine/: README*, dataflow.dia
    • /usr/local/share/aclocal/xine.m4
    • /usr/local/include/libintl.h
    • /usr/local/include/xine.h
    • /usr/local/include/xine/*
    • /usr/local/lib/charset.alias
    • /usr/local/lib/libxine*
    • /usr/local/lib/xine/*
    • /usr/local/share/locale/locale.alias
    • /usr/local/share/gettext/* (уже есть /usr/share/gettext!)
    • /usr/local/share/locale/*/LC_MESSAGES/libxine1.mo
    • /usr/local/share/xine/libxine1/fonts/*
    • /usr/local/lib/pkgconfig/libxine.pc
  • ldconfig
  • получить и развернуть xine-ui-0.9.17-tar.gz (проигрыватель со шкурками), перейти туда
  • ./configure (хочет curl >= 7.10.2, доступ к http://, ftp:// и др.)
  • make
  • make install
    • /usr/local/bin: xine, xine-remote
    • /usr/local/man/??/man1/xine.1
    • /usr/local/man/man1: xine.1, aaxine.1, xine-check.1, xine-remote.1, xine-bugreport.1
    • /usr/local/share/doc/xine-ui/*
    • /usr/local/share/doc/xitk/README
    • /usr/local/share/locale/*/LC_MESSAGES/xine-ui.mo
    • /usr/local/share/locale/*/LC_MESSAGES/xitk.mo
    • /usr/local/share/xine/desktop/xine.desktop
    • /usr/local/share/pixmaps/xine*
    • /usr/local/share/xine/visuals/*
    • /usr/local/share/xine/skins/*/*
    • /usr/local/share/xine/skins/xinetic
  • убеждаемся, что наполнен /usr/lib/win32
  • ранее требовалось поставить xine-dvdnav-0.9.13 (использует libdvdread и libdvdnav) - навигация по меню DVD, но теперь он не собирается, а навигация есть и так (большая буква N)
  • кроме "штатного" проигрывателя, использующего библиотеки xine-lib, имеется множество проигрывателей, разработанных сторонними организациями; я поставил для примера gxine-0.2.1 (проигрыватель для gnome), ничего в нем интересного не оказалось, думаю, что и остальные такого же класса (кто-то отметился, что сделал проигрыватель для Gnome, кто-то - для KDE)
    • ./configure
    • make
    • make install
      • /usr/local/share/gxine/pixmaps/*
      • /usr/local/bin/gxine
      • /usr/local/man/man1/gxine.1
      • /usr/local/man/de/man1/gxine.1
      • /usr/local/lib/gxine/gxineplugin*
      • /usr/local/share/gnome/apps/Multimedia/gxine.desktop
  • изо всего множества дополнений осмысленным выглядит xine-vcdx-1-beta2 - интерпретатор VCD/SVCD PBC для xine (состоягоние работ - альфа, будет слит после доработок; для использования надо запускать xine с MRL vcdx://)
    • ./configure
      vcdimager: checking for libxml - version >= 2.3.8... no (хотя у меня libxml 2.4.23)
      ошибка в /usr/bin/libxml2-config: должен выдавать -I/usr/include/libxml2/libxml
    • make
    • make install
      • /usr/local/lib/xine/plugins/1.0.0/xineplug_inp_vcdx.so
      • /usr/local/lib/xine/plugins/1.0.0/xineplug_inp_vcdx.la

mplayer

mplayer - проигрыватель и кодировщик видео.

Установка:

  • убедиться, что все вышеперечисленные библиотеки и пакеты установлены (может, кроме ogle, tvtime и xine, хотя я без них не пробовал ;)
  • дополнить /usr/lib/win32 подправленными кодеками отсюда и отсюда
  • получить и развернуть исходные тексты
  • ./configure --enable-largefiles --enable-gui --enable-new-conf --enable-menu --enable-xmms --enable-dvdnav --enable-shared-pp --with-xanimlibdir=/usr/X11R6/lib/xanim/mods
    (LIVE.COM Streaming Media libraries ... no)
    (--enable-libfame сломано; можно скопировать ее внутрь, собрать, не устанавливать, скопировать библиотеки (.libs) и *.h на внешний уровень; но я так устал с ними бороться :(
  • make
  • make install
    • /usr/local/lib/libdha-0.1.so
    • /usr/local/lib/libdha.so
    • /usr/local/lib/libpostproc.so.0.0.1
    • /usr/local/lib/libpostproc.so
    • /usr/local/include/postproc/postprocess.h
    • /usr/local/lib/mplayer/vidix/*.so
    • /usr/local/bin/mplayer (он же gmplayer)
    • /usr/local/bin/mencoder
    • /usr/local/etc/mplayer/codecs.conf
    • /usr/local/man/man1/mplayer.1 (он же mencoder.1)
  • загрузить шрифты и поместить шрифты нужного размера (все файлы из одной поддиректории) в /usr/local/share/mplayer/font/ (странно, но раньше там лежали koi8r-font.tar.bz2)
  • загрузить шкурки (необязательно все ;) в /usr/local/share/mplayer/Skin/ (поправить права доступа)

Просмотр 50-герцового видео в родном разрешении:

  • добавить в секцию Monitor файла /etc/X11/XF86Config строку
    Modeline  "pal"  50.00  768 832 856 1000  576 590 595 630  -hsync -vsync
    
  • mplayer -double -vm -vsync -fs видео

Преобразование из одного видео формата (MPEG) в другой (YUV4MPEG2)

mplayer -vo yuv4mpeg -frames 50 final.m1v

dvdnav (обработка DVD меню) сломана, похоже, навсегда.

Неразобранные ссылки


Copyright © 1996-2003 Sergey E. Bogomolov; www.bog.pp.ru

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости