Последнее изменение файла: 2003.03.08
Скопировано с www.bog.pp.ru: 2003.03.11
Порядок установки программ и предварительная установка необходимых пакетов из дистрибутива (в т.ч. *-devel) очень важны, т.к. при сборке скрипты ./configure проверяют наличие необходимых для реализации части функций библиотек и, если библиотека отсутствует, то собранная программа не будет иметь соответствующих функций. Например, если перед установкой mplayer не установить пакет работы с пультом ДУ Lirc, то mplayer будет собран без возможности управления с пульта ДУ. Внимательно следите за сообщениями, выдаваемыми ./configure!
Предварительные действия:
Теперь устанавливаем по порядку (естественно, надо стараться брать самые свежие версии, но возможны конфликты между пакетами и используемыми библиотеками):
Для просмотра DVD-Video я использую ogle, для просмотра ТВ - tvtime или xawtv, для всех прочих источников - mplayer, для видеозахвата - streamer из xawtv (в формате YUV4MPEG2), для обработки и сжатия - mjpegtools или mencoder из mplayer и lame (MPEG-1 с нестандартными параметрами, звук - MP3; в дальнейшем записывается в формате псевдо VCD с использованием vcdimager).
Пакет lame 3.92 предоставляет разделяемую библиотеку для кодирования звука в формате MPEG-1 Layer 3 (CBR, VBR, ABR), а также программу для кодирования файлов из форматов PCM (.wav), MP1, MP2 или MP3. Позволяет использовать некоторые фильтры и преобразования звука перед сжатием.
Установка:
Простейшие способы применения:
Пакет bbtool 1.9 позволяет получить подробную и очень подробную информацию о файлах форматов MPEG, включая файлы .vob (мне он помог понять, почему не показывается второй VideoCD, сделанный mjpegtools).
Установка:
Использование утилит:
Пакет mpgtx 1.3 позволяет демультиплексировать потоки MPEG1 (системные) и MPEG2 (программные и транспортные), разбивать их, а также элементарные аудио и видео потоки на части (по границам GOP) или сливать потоки в один, получение информации, редактирование меток (id3 tag) MPEG1 audio layer 3.
Установка:
Использование утилит (в действительности, это ссылки на одну программу mpgtx):
Поставляется в виде разделяемых библиотек для кодирования и декодирования файлов в формате DivX.
Я всегда с сомнением относился к этим ребятам, которые взяли входящие в состав стандарта MPEG4 (ISO/IEC 14496) исходные тексты (которые лежат в свободном доступе!) и, изображая таинственных "кул хацкеров", ограбивших MS, распространяют их исключительно в бинарном виде (коды действительно принадлежат MS, но их может взять любой на сайте ISO). При этом они несколько раз меняли формат данных, так что по мере распространения настоящего формата хранения MPEG4 будет трудно найти проигрыватель видеофильмов в формате DivX3. Кстати, если взять в качестве источника цифровое видео с DVD и закодировать его в формате MPEG1 со звуком в формате MP3 и ключевыми кадрами пореже (1/300 вместо обычных 1/15), то, записав его в виде VideoCD (это добавляет 15% емкости CD), можно получить качество сравнимое с DivX.
Установка:
XviD 0.9 представляет собой реализацию библиотек DivX с открытыми исходными текстами (которые некоторые "солидные" изготовители программ и оборудования для обработки видео тихонечко включают в свои системы)
Установка:
Библиотека libfame 0.9.0 (fame, recmpeg, fast assembler mpeg encoder) представляет собой ускоренный кодировщик видео MPEG-1 и MPEG-4
Установка:
Библиотека libdv 0.99 предоставляет библиотеку для кодирования и декодирования видео в формате DV (видеокамеры с интерфейсом IEEE 1394, Firewire, iLink), включая примеры использования playdv и encodedv
Установка:
Пакет avifile 0.7.27-20030122 предоставляет библиотеку для чтения и разборки AVI (ASF, WMP) файлов, а также некоторый набор использующих ее утилит. В качестве кодеков в некоторых случаях используются исполняемые DLL файлы, предназначенные для Win32. Я использую только библиотеки (для сборки других пакетов) и avitype (я уже отвык от программ без документации и ключа --help).
Установка:
Библиотека lzo 1.08 предоставляет целый набор алгоритмов сжатия без потерь. Среди них попадаются такие, что сжимают YUV на 25% со скоростью 35 МБ/сек и декомпрессируют со скоростью 250 МБ/сек (скорость memcpy() при переполнении кеша всего вдвое больше!). Наверняка, с помощью простейшего алгоритма предсказания (db-a) можно довести коэффициент сжатия до 50% без особой потери скорости сжатия (скорость декомпрессии упадет сильно). Прямой конкурент zlib, если требуется большая скорость.
Установка:
Пакет 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.
Установка:
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 );
< {8, 5, 720, 576, 10368000, 15, 112}, /* ML */
---
> {8, 5, 768, 576, 10368000, 15, 112}, /* ML */
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)
MOVTAR_CFLAGS = -I директория-libmovtar-0.1.3 MOVTAR_CONFIG = директория-libmovtar-0.1.3 MOVTAR_LIBS = -Lдиректория-libmovtar-0.1.3 -lmovtar
Рассмотрим некоторые способы применения пакета (у меня накопился большой экспериментальный материал по 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
Формат 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 0.6.3 предоставляет множество фильтров для преобразования видеопотоков.
Установка:
В состав пакета mpeg2dec 0.3.1 входила полезная утилита mpeg2toc, которая строила оглавление DVD. В текущей версии она пропала, так что взял из старой (исходников которой не осталось :( эту версию устанавливать не стал.
Библиотека libdvdnav 0.1.3 (выделена из проекта xine) позволяет обращаться с меню на DVD.
Установка:
Библиотека libmad 0.14.2b декодирует звук из форматов MPEG-1 и MPEG-2, Layer 1, 2 и 3.
Установка:
Вспомогательная библиотека для работы со звуком libsndfile 1.0.3 используется в пакете FAAD.
Установка:
Библиотека faad2 1.1 (FAAD, FAAC) предоставляет кодек звука MPEG-4 AAC (Dolby), профили: LC, MAIN, LTP.
Установка:
AM_CONFIG_HEADER(configtop.h)
../common/mp4v2/.libs/libmp4v2.so: undefined reference to `operator new[](unsigned)'
all:
echo empty
install:
echo empty
Если все, что вам нужно - это просмотр DVD (VCD, SVCD), а обрабатывать видео вы и не собирались, то можете удалять все ранее описанные пакеты и не устанавливайте никаких новых, кроме ogle!
ogle 0.8.5 - маленький и простоустанавливаемый проигрыватель DVD. При этом в отличие от своих более "навороченных" собратьев (mplayer, xine, xmovie) он делает это хорошо: умеет обрабатывать меню диска (в том числе с помощью мышки), ускоренное и замедленное воспроизведение, автомагический выбор русской звуковой дорожки (и переключение на другую дорожку с первого раза и без щелчка!). Только с его помощью я увидел некоторые дополнения к фильмам. В комплекте идет программа ifo_dump Из недостатков я заметил всего два:
Программу потребительского класса лучше устанавливать из RPM
xanim 2.80.2 (не развивается с 1999) позволяет просматривать (и перекодировать) видео в различных архаичных форматах (FLI/FLC, Indeo, Creative YUV, gif animated ;). Модули могут использоваться другими пакетами.
Установка из RPM
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 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.
Установка:
mplayer - проигрыватель и кодировщик видео.
Установка:
Просмотр 50-герцового видео в родном разрешении:
Modeline "pal" 50.00 768 832 856 1000 576 590 595 630 -hsync -vsync
Преобразование из одного видео формата (MPEG) в другой (YUV4MPEG2)
mplayer -vo yuv4mpeg -frames 50 final.m1v
dvdnav (обработка DVD меню) сломана, похоже, навсегда.