Bog BOS: dw:  Программы для работы с видео в Linux

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

Bog BOS: dw: Программы для работы с видео в 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
  23. mpeg4ip

Для просмотра 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. Позволяет использовать некоторые фильтры и преобразования звука перед сжатием.

Установка:

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

bbtool

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

Установка:

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

mpgtx

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

Установка:

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

divx4linux

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

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

Установка:

XviD

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

Установка:

libfame

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

Установка:

libdv

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

Установка:

avifile

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

Установка:

lzo

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

Установка:

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.

Установка:

Рассмотрим некоторые способы применения пакета (у меня накопился большой экспериментальный материал по 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". Поле состоит из односимвольного имени и подряд идущего значения:

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

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

Библиотека 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 предоставляет множество фильтров для преобразования видеопотоков.

Установка:

mpeg2dec

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

libdvdnav

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

Установка:

libmad

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

Установка:

libsndfile

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

Установка:

faad2

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

Установка:

ogle

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

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

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

xanim

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

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

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).

Установка:

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

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

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

xawtv

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

Установка:

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.

Установка:

mplayer

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

Установка (MPlayer-0.90):

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

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

mplayer -vo yuv4mpeg -frames 50 final.m1v

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

mpeg4ip

Пакет mpeg4ip позволяет кодировать MPEG-4 (требуется lame), передавать его по сети и проигрывать на клиентских компьютерах.

Установка без потокового сервера (mpeg4ip-0.9.8), требуется gcc 3.2, желательно установить FAAC/FAAD (или хотя бы sndfile):

mp4player/gmp4player

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

Bog BOS: dw:  Программы для работы с видео в Linux

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