Последнее изменение файла: 2012.11.25
Скопировано с www.bog.pp.ru: 2023.10.01
Bog BOS: dw: Программы для работы с видео в Linux
Порядок установки программ и предварительная установка необходимых пакетов из дистрибутива
(в т.ч. *-devel) очень важны, т.к. при сборке скрипты ./configure проверяют
наличие необходимых для реализации части функций библиотек и, если
библиотека отсутствует, то собранная программа не будет иметь соответствующих
функций. Например, если перед установкой mplayer
не установить пакет работы с пультом ДУ Lirc,
то mplayer будет собран без возможности управления с пульта ДУ.
Внимательно следите за сообщениями, выдаваемыми ./configure!
настройка дополнительных репозитариев yum
для F10 (rpmfusion-free, rpmfusion-nonfree, russianfedora-fixes,
russianfedora-free, russianfedora-nonfree), для FC6 (livna, freshrpms) и для FC3 (at, dag),
чтобы можно было устанавливать уже готовые пакеты
добавить /usr/local/lib в /etc/ld.so.config и сделать ldconfig
(запуск ldconfig
рекомендуется повторять после установки каждой разделяемой библиотеки,
т.к. некоторые разработчики забывают вставить соответствующую строчку
в процедуру установки)
Теперь устанавливаем по порядку (естественно, надо стараться брать самые свежие версии,
но возможны конфликты между пакетами и используемыми библиотеками):
Для просмотра DVD-Video я использую ogle, для просмотра ТВ - tvtime,
для всех прочих источников - mplayer, для видеозахвата -
streamer из xawtv (в формате YUV4MPEG2) или mencoder, для обработки и сжатия -
mjpegtools или mencoder из mplayer и lame (MPEG-1 с нестандартными параметрами,
звук - MP3; в дальнейшем записывается в формате псевдо VCD/DVD).
Библиотека lzo предоставляет целый набор алгоритмов
сжатия без потерь. Среди них попадаются такие, что сжимают YUV на 25%
со скоростью 35 МБ/сек и декомпрессируют со скоростью 250 МБ/сек
(скорость memcpy() при переполнении кеша всего вдвое больше!). Наверняка, с помощью простейшего
алгоритма предсказания (db-a) можно довести коэффициент сжатия до 50%
без особой потери скорости сжатия (скорость декомпрессии упадет сильно).
Прямой конкурент zlib, если требуется большая скорость.
Имеется утилита сжатия/разжатия lzop
(.lzo).
В F10 установил пакеты lzo, lzo-minilzo и lzo-devel версии 2.03-1.fc10
и lzop версии 1.02-0.6.rc1.fc9.
В FC6 установил пакеты lzo и lzo-devel версии 2.02-2.fc6
и lzop версии 1.02-0.4.rc1.fc6 из репозитария extras.
В FC3 установил пакеты lzo и lzo-devel версии 1.08 из репозитария dag.
Простейшие графические проигрыватели в стиле WinAmp:
xmms (GTK1) и
audacious
(GTK2, внешнее управление утилитой audtool).
xmms2 стал развиваться в сторону
клиент-серверной модели (gxmms2 на GTK2).
К сожалению, ничего не знают о местных традициях в виде ID3v1 тэгов в cp1251 и
списков с именами файлов в стиле MS Windows в непонятной кодировке.
Для F10 устанавливаем audacious, audacious-libs,
audacious-plugins, audacious-plugins-vortex, audacious-plugins-wavpack версии 1.5.1-5.fc10
и audacious-plugins-freeworld, audacious-plugins-freeworld-aac,
audacious-plugins-freeworld-alac, audacious-plugins-freeworld-mms,
audacious-plugins-freeworld-mp3, audacious-plugins-freeworld-tta,
audacious-plugins-freeworld-wma из rpmfusion версии 1.5.1-1.fc10.
Для FC6 устанавливаем xmms 1:1.2.10-29.fc6, xmms-cdread, xmms-flac, xmms-libs,
xmms-lirc, xmms-skins, xmms-speex из extras (потянули glib 1:1.2.10-26.fc6,
gtk+ 1:1.2.10-55.fc6 и mikmod 3.1.6-39.fc6), xmms-mp3 1:1.2.10-16.fc6
и xmms-wma 0:1.0.5-3.fc6 из freshrpms. Заодно поставил xmms-normalize 0.7.7-2.lvn6
(потянул libid3tag и normalize) и xmms-faad2 из репозитария livna.
Для FC6 устанавливаем audacious 1.2.2-2.fc6, audacious-devel 1.2.2-2.fc6,
audacious-libs 1.2.2-2.fc6, audacious-plugins 1.2.5-2.fc6 из extras;
audacious-plugins-nonfree-mp3 1.2.5-1.lvn6 и audacious-plugins-nonfree-wma 1.2.5-1.lvn6 из
livna (потянули libbinio, libmpcdec, libsidplay, taglib из extras),
а заодно audacious-plugins-nonfree-aac 1.2.5-1.lvn6.
Для FC3 берём пакеты xmms 1.2.10 и xmms-mp3 (и xmms-skins) из репозитария dag.
Пакет bbtool 1.7 позволяет получить подробную и очень подробную информацию о
файлах форматов MPEG, включая файлы .vob (мне он помог понять, почему не показывается второй VideoCD,
сделанный mjpegtools).
Пакет mkvtoolnix
позволять разобрать видеофайл в формате matroska
(матрёшка) на составные части и собрать и обратно.
Здесь же "завалялись" vc1parserб diracparser и base64tool.
Графическая оболочка умеет работать не только с .mkv.
Установка пакета mkvtoolnix и mkvtoolnix-gui (mkvinfo, mmg) версии 2.4.2-1.fc10 в F10.
Библиотека libdvdcss
выделена, чтобы "вывести из под удара" разработчиков программ для работы с DVD.
Занимается дешифровкой DVD-Video (CSS). Управляется переменными окружения:
DVDCSS_METHOD={title|disc|key}
title - дешифрованный ключ фильма (title) подбирается из шифрованных секторов;
позволяет дешифровать не только диски, но и файлы;
срабатывает не всегда; не работает, если ключ изменяется посреди фильма
disc - подбирается ключ диска, что позволяет вычислять ключи фильмов
key - подбирается ключ диска с использованием файла,
содержащего известные ключи проигрывателя
DVDCSS_VERBOSE={0|1|2}
В F10 установил пакеты libdvdcss и libdvdcss-devel версии 1.2.9-5.fc10
из репозитария russianfedora-free.
В FC6 установил пакеты libdvdcss и libdvdcss-devel версии 1.2.9-4.lvn6 из репозитария livna.
В FC3 установил пакеты libdvdcss и libdvdcss-devel версии 1.2.9 из репозитария dag.
Библиотека libdvdread занимается разборкой структуры DVD-VIdeo диска
(выделена из проекта ogle).
В F10 установил пакеты libdvdread и libdvdread-devel версии 4.1.3-1.fc10.
В FC6 установил пакеты libdvdread и libdvdread-devel версии 0.9.7-2.fc6 из репозитария extras.
В FC3 установил пакеты libdvdread и libdvdread-devel версии 0.9.7 из репозитария dag.
Библиотека libdvdnav
(выделена из проекта ogle) позволяет обращаться с меню на DVD-Video.
В F10 установил пакеты libdvdnav и libdvdnav-devel версии 4.1.3-1.fc10.
В FC6 установил пакеты libdvdnav и libdvdnav-devel версии 0.1.10-3.fc6
из репозитария freshrpms.
В FC3 установил пакеты libdvdnav и libdvdnav-devel версии 0.1.10
из репозитария dag.
Установка libdvdnav 0.1.3 в RH8.0:
убедиться, что установлены пакеты libdvdread-devel и libdvdcss-devel
Если все, что вам нужно - это просмотр DVD (VCD, SVCD), а обрабатывать видео
вы и не собирались, то можете удалять все ранее описанные пакеты и не устанавливайте
никаких новых, кроме ogle!
ogle -
маленький и простоустанавливаемый проигрыватель DVD.
При этом в отличие от своих более "навороченных" собратьев (mplayer, xine, xmovie) он делает это хорошо:
умеет обрабатывать меню диска (в том числе с помощью мышки), ускоренное и замедленное
воспроизведение, автомагический выбор русской звуковой дорожки (и переключение на другую
дорожку с первого раза и без щелчка!).
Только с его помощью я увидел некоторые дополнения к фильмам. В комплекте идет программа ifo_dump.
Выбор угла зрения (angle selection) возможен только из меню DVD (хотя кнопка уже припасена).
К сожалению, развитие программы прекращено в 2003 и в связи с модным течением среди
разработчиков Gnome/KDE по прекращению поддержки совместимости с ранее разработанным ПО
функции отваливаются одна за другой.
Требуется пакет xvattr.
В F10 установил пакеты xvattr 1.3-15, ogle и ogle_gui 0.9.2-8.fc7 из
freshrpms для F8 (потребовал старую версию libdvdread).
В FC6 установил пакеты ogle, ogle-devel и ogle_gui версии 0.9.2-7.fc6
из репозитария freshrpms.
В FC3 установил пакеты ogle, ogle-devel и ogle_gui версии 0.9.2
из репозитария dag. Проблемы с ALSA, поэтому поменял alsa на oss в /usr/share/ogle/oglerc.
Пакет dvdbackup позволяет узнать структуру DVD-Video
и скопировать весь или часть фильма (что-то он туда добавляет лишнего).
Не поддерживается с 2002 года и потерял совместимость с текущей версией используемой библиотеки
Пакет mpgtx позволяет
демультиплексировать потоки MPEG1 (системные) и MPEG2 (программные и
транспортные), разбивать их, а также элементарные аудио и видео потоки
на части (по границам GOP) или сливать потоки в один,
получение информации, редактирование меток (id3 tag) MPEG1 audio layer 3.
В F10 установил пакет mpgtx версии 1.3.1-4.fc10 из репозитария rpmfusion-free.
В FC6 установил пакет mpgtx версии 1.3.1-2.lvn6 из репозитария livna.
В FC3 установил пакет mpgtx версии 1.3.1 из репозитария livna.
Поставляется в виде разделяемых библиотек для кодирования
и декодирования файлов в формате DivX.
Я всегда с сомнением относился к этим ребятам,
которые первоначально взяли
входящие в состав стандарта MPEG4 (ISO/IEC 14496) исходные тексты (которые
лежат в свободном доступе!) и, изображая таинственных "кул хацкеров",
ограбивших MS, распространяют их исключительно в бинарном виде (коды
действительно принадлежат MS, но их может взять любой на сайте
ISO).
При этом они несколько раз меняли формат данных, так что по мере
распространения настоящего формата хранения MPEG4 будет трудно найти
проигрыватель видеофильмов в формате DivX3. Кстати, если взять в качестве
источника цифровое видео с DVD и закодировать его в формате MPEG1 со звуком
в формате MP3 и ключевыми кадрами пореже (1/300 вместо обычных 1/15), то,
записав его в виде VideoCD (это добавляет 15% емкости CD), можно получить
качество сравнимое с DivX.
В F10 и FC6 не устанавливал.
В FC3 установил пакеты divx4linux и divx4linux-devel
версии 5.0.5 из репозитария at.
XviD представляет собой реализацию
MPEG-4 (профили Simple и Advanced Simple) с открытыми исходными текстами
(которые некоторые "солидные" изготовители программ и оборудования
для обработки видео тихонечко включают в свои системы).
В F10 установил пакеты xvidcore и xvidcore-devel
версии 1.2.1-1.fc10 из репозитария rpmfusion-free.
В FC6 установил пакеты xvidcore (сюда вошёл libxvidcore4) и xvidcore-devel
(а здесь отсутствует libxvidcore.a) версии 1.1.2-1.lvn6 из репозитария livna.
В FC3 установил пакеты libxvidcore4, xvidcore и xvidcore-devel
версии 1.0.3 из репозитария at.
Консольная утилита dvdauthor
позволяет преобразовать набор MPEG-2 PS с VOBU (DVD NAV) пакетами
(создаются с помощью "mplax -f 8", "mplayer -mpegopts format=dvd") в стандартный каталог DVD-Video.
В F10 установил пакет dvdauthor версии 0.6.14-6.fc10.
В FC6 установил пакет dvdauthor версии 0.6.13-1.fc6 (0.6.14-1) из репозитария extras.
В FC3 установил пакет dvdauthor версии 0.6.11 из репозитария livna.
Утилита dvdauthor считывает формат будущего DVD-Video диска из XML-файла
с описанием (ключ -x), каталог с результирующей файловой структурой DVD-Video задаётся ключом "-o".
Для описания формата необходимо представление о логической структуре DVD-Video:
диск состоит из наборов фильмов (titleset) и главного набора меню
(VMGM, TOC menu, top level menu, title menu)
набор фильмов может состоять из фильмов (title) и меню (VTS menu)
фильм может быть поделён на части (chapter)
фильмы и меню из одного набора должны иметь одинаковые характеристики звука, видео и субтитров
из VMGM можно получить доступ к меню и фильмам из любого набора
из обычного меню - только к фильмам из текущего набора
код языка задаётся в соответствии с ISO 639: ru, en
pgcgroup (pgc) обобщённое наименование для отдельного меню или фильма
pgc может содержать видеодорожку, до 8 звуковых дорожек, до 32 субтитров
устройство DVD может выполнять команды виртуальной машины
команды разделяются символом ';'
C-подобные выражения
блоки в фигурных скобках
операторы
переменная=выражение;
if (выражение) блок; [else блок;]
{call | jump} { vmgm menu | titleset номер menu [номер | entry имя] | titleset номер title номер [chapter номер]} ;
resume;
разрядность переменных - 16 бит; до 16 общих регистров;
dvdauthor резервирует 3 регистра под свои нужды, доступны от g0 до g12;
24 системных регистра от s0 до s23 (можно использовать синонимы):
s1 (audio) - номер звукового канало (от 0 до 7)
s2 (subtitle) - номер дорожки субтитров (от 0 до 31,
добавление 64 к номеру дорожки делает субтитры обязательными)
s3 (angle) - выбор камеры
s8 (button) - номер подсвеченной кнопки, умноженный на 1024
можно задать выполнение списка команд при установке диска (fpc - First Program Chain),
перед (pre) и после (post) pgc
pgc может содержать описание экранных кнопок и выполняемых по их нажатию команд
pgc именуются, имя VMGM меню - title, имена VTS меню - root, subtitle, audio, angle, ptt
меню, кнопки и субтитры должны разделять общую палитру цветов (16 штук)
Упрощённая (полная схема в /usr/share/dvdauthor/dvdauthor.xsd)
структура XML-файла (параметры видео и звука могут извлекаться
из исходных файлов автоматически, кроме языка):
Дополнительные утилиты: mpeg2desc (демультиплексирование видео и звука),
spumux (генерация и мультиплексирование subtitles, формат задаётся XML-файлом, картинки в PNG или BMP,
с её помощью создаются меню с нажимаемыми кнопками и картинками,
а также графические субтитры из .sub, .srt, .ssa, .smi, .rt, .txt, .aqt, .jss, .js, .ass),
spuunmux (выдирание имеющихся).
Методическое пособие
по преобразованию произвольного видео файла в DVD-Video
с использованием mplayer и k3b
(для хранения промежуточного файла можно использоавть fifo):
преобразование в MPEG-2 PS со звуком в формате AC3 (hwac3), поток (vbitrate) по возможности,
соотношение сторон по потребности (4/3), разрешение (720:480) и частоту кадров (30000/1001) в зависимости
от телевизионного стандарта:
gpac -
большой пакет для работы с MPEG-4 непонятного назначения (авторы называют это "multimedia framework").
Обеспечивает создание MPEG-4 программ, трансляцию их по сети (RTP/RTSP) и просмотр.
Работает также с avi, mov, mpg, MPEG-4 Systems, VRML/X3D, SVG, javascript.
Конфигурационный файл - ~/.gpacrc.
Ставил его только из-за библиотек и утилит для работы x264 с
файловым форматом MPEG-4 (.mp4, .mov, QT, ISO Media), текущая версия x264 умеет работать с
форматом Matroska, так что потребность отпала.
В комплекте исходных текстов идут модифицированные версии библиотек работы с видео и звуком (ffmpeg и т.п.),
но их я не устанавливал. Базовая платформа разработчиков - MS Windows
(проблемы с прописными и строчными буквами).
Для более полной сборки требуются js, amr-nb, mad, faad, xvid, ffmpeg (для которого требуется x264,
для которого требуется gpac).
MP4Box - утилита для работы с файловым форматом MPEG-4 (MP4, 3GP, MOV),
а также AVI, MPEG-PS, OGG, MPEG Audio, ADTS-AAC, MPEG-4 Visual, H263 Video, AVC/H264 Video,
VRML, X3D-XML, X3D-VRML.
MP4Client - проигрыватель командной строки с использованием SDL;
при первом запуске создаёт .gpacrc; на файл, закодированный x264 сообщает,
что нет такого кодека. Не удалось найти ни одного файла MOV, который он смог бы показать
(причём он отнекивался весьма разнообразно) и запись только одной коммерческой трансляции.
MPEG4Gen, SVGGen, X3DGen.
В F10 установил пакеты gpac, gpac-libs, gpac-devel и gpac-devel-static
версии 0.4.5-0.5.20080217cvs.fc10 из rpmfusion-free.
Установка gpac-CVS20070218 (gpac-CVS20071217) в FC6:
cvs -z3 -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac co -P gpac
chmod u+x configure
./configure --disable-ipv6 [--use-faad=local (для faad2-2.5, что-то поломали в интерфейсе)]
для --enable-amr-nb, --enable-amr-nb-fixed, --enable-amr-wb и --enable-amr
необходимо тащить исходники с 3gpp
для --use-ffmpeg=local необходимо тащить дополнительный каталог
make help
make
make install (Root cannot install local mozilla plugins!)
/usr/local/man/man1/ (mp4box.1, mp4client.1, gpac.1), заметьте MP4Box, но mp4box.1!
/usr/local/share/gpac/gpac.mp4
убедиться, что выполнился ldconfig
make install-lib
/usr/local/include/gpac/
/usr/local/include/gpac/internal/
/usr/local/include/gpac/modules/
/usr/local/lib/libgpac_static.a
MP4Client: error while loading shared libraries: (SELinux)
/usr/local/lib/libgpac.so: cannot restore segment prot after reloc: Permission denied
chcon -t texrel_shlib_t /usr/local/lib/*.so
chcon -t texrel_shlib_t /usr/local/lib/gpac/*.so
Установка gpac-0.4.2-rc2 в FC3:
chmod u+x configure
./configure --prefix=/usr/local --disable-ipv6
для --enable-amr-nb-fixed и --enable-amr необходимо тащить исходники с 3gpp
для --use-ffmpeg=local необходимо тащить дополнительный каталог
make help
make
make install
/usr/local/bin
MP4Box (утилита для работы с файловым форматом MPEG-4)
MP4Client (проигрыватель командной строки с использованием SDL;
при первом запуске создаёт .gpacrc; на файл, закодированный x264 сообщает,
что нет такого кодека)
/usr/local/lib/gpac/gm_*
/usr/local/lib/ (libgpac-0.4.2.so, libgpac.so)
/usr/local/man/man1/ (mp4box.1, mp4client.1, gpac.1), заметьте MP4Box, но mp4box.1!
убедиться, что выполнился ldconfig
make install-lib
/usr/local/include/gpac/
/usr/local/include/gpac/internal/
/usr/local/include/gpac/modules/
/usr/local/lib/libgpac_static.a
Установка gpac из CVS (20060613) в FC3:
yum install libjs
поменялись правила доступа к анонимному CVS серверу на sourceforge.net:
cvs -z3 -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac co -P gpac
chmod u+x configure
./configure --prefix=/usr/local --disable-ipv6
для --enable-amr-nb-fixed и --enable-amr необходимо тащить исходники с 3gpp
для --use-ffmpeg=local необходимо тащить дополнительный каталог
make help
make
make install
/usr/local/bin
MP4Box (утилита для работы с файловым форматом MPEG-4)
MP4Client (проигрыватель командной строки с использованием SDL;
при первом запуске создаёт .gpacrc; на файл, закодированный x264 сообщает,
что нет такого кодека)
для --enable-amr-nb-fixed и --enable-amr необходимо тащить исходники с 3gpp
для --use-faad=local необходимо тащить дополнительный каталог
для --use-mad=local необходимо тащить дополнительный каталог
для --use-xvid=local необходимо тащить дополнительный каталог
для --use-ffmpeg=local необходимо тащить дополнительный каталог
--use-js=local вызывает проблемы сборки в каталоге laser
make help
заменить vapth на vpath в applications/generators/SVG/Makefile
make
make install
/usr/local/bin
MP4Box (утилита для работы с файловым форматом MPEG-4)
MP4Client (проигрыватель командной строки с использованием SDL;
при первом запуске создаёт .gpacrc; на файл, закодированный x264 сообщает,
что нет такого кодека)
/usr/local/man/man1/ (mp4box.1, mp4client.1, gpac.1), заметьте MP4Box, но mp4box.1!
убедиться, что выполнился ldconfig
make install-lib
/usr/local/include/gpac/
/usr/local/include/gpac/internal/
/usr/local/include/gpac/modules/
/usr/local/lib/libgpac_static.a
Установка gpac 0.4.0-rc2 в FC5 (что-то долго нет релиза):
chmod u+x configure
./configure --prefix=/usr/local
make
закоментировать gl в modules/x11_out/x11_out.c
make
make install
/usr/local/bin
MP4Box (утилита для работы с файловым форматом MPEG-4)
MP42AVI (преобразование векторной графики MPEG-4 BIFS в несжатый AVI)
MP4Client (проигрыватель командной строки с использованием SDL;
при первом запуске создаёт .gpacrc; на файл, закодированный x264 сообщает,
что нет такого кодека)
x264
(неофициальный сайт,
список изменений) -
кодировщик H.264 (MPEG-4 AVC) из форматов raw YUV 4:2:0
(требуется указывать размер кадра - 640x480 - после имени файла)
или "старого" YUV4MPEG 4:2:0 (суффикс имени файла д.б. ".y4m"),
выводит в форматах (определяется суффиксом имени файла, ключ "-o"):
MKV (.mkv), MP4 (.mp4, требуется gpac, для версий 299 и выше требуется gpac-0.4) и 264 (.264).
Документация отсутствует. Полный список ключей выдаётся по "--longhelp":
управление группами кадров (GOP, B-кадры сильно замедляют обработку)
--min-keyint число (25, -i, минимальный размер GOP)
--keyint число (250, -I, максимальный размер GOP,
увеличение GOP не ведёт к деградации изображения в отличие от MPEG1/2/4)
--scenecut число (40, интенсивность определения границы сцен для вставки I-кадров, от 0 до 100)
--pre-scenecut (использовать упрощённый алгоритм определения границ сцен,
необходим для многопроцессорной обработки)
--bframes число (0, -b, число B-кадров между I- и P-кадрами)
--b-bias число (0, интенсивность адаптивного алгоритма вставки B-кадров)
--no-b-adapt (отключить адаптивный алгоритм принятия решения о количестве B-кадров)
управление балансом между степенью сжатия и качеством изображения
--qp число (26, -q, сжатие с постоянным качеством QP,
0 - без потерь, 18 - потери не заметны, качество P- и B-кадров определяется --ipratio и --pbratio)
--crf плавающее (сжатие с переменным потоком - VBR; в чём отличие от -q?)
--bitrate число (-B, сжатие с постоянным потоком - CBR, kbps)
--weightb (-w, взвешенное предсказание для B-кадров)
--me строка ("hex", метод перебора при определении вектора движения:
dia - по углам с радиусом 1 (самый быстрый), hex - по шестиугольнику с радиусом 2,
umh - поиск по шестиугольникам разных размеров, esa - полный перебор,
tesa - ещё более полный перебор (?)
--merange число (16, радиус поиска вектора движения)
--mvrange число (-1, максимальная длина вектора движения, -1 - автоматически)
--mvrange-thread число (-1, минимальный буфер между потоками)
--subme число (5, -m, метод субпиксельного уточнения вектора движения, от 1 до 7)
--b-rdo (модификация метода субпиксельного уточнения вектора движения для B-кадров при -m=6 и =7)
--mixed-refs (выбирать опорные кадры поблочно, требуемое для хранения этой
информации место может увеличить размер потока вместо ожидавшегося уменьшения)
--no-chroma-me (не учитывать цветовые плоскости при определении вектора движения)
--bime (для B-кадров одновременно оптимизировать вектора движения в обе стороны)
--8x8dct (-8, адаптивный выбор размера блока)
--trellis (0, -t, уплотнение хвостов (Trellis RD quantization), 0 - не использовать,
1 - только при конечном кодировании макроблока, 2 - на всех этапах)
--no-fast-pskip (отключить быстрое обнаружение SKIP для P-кадров)
--no-dct-decimate (?)
контроль потока при многопроходной обработке (CBR, ABR)
--pass номер-прохода (-p, 1 - создание файла статистики, 2 - последний проход,
3 - промежуточный проход)
--stats имя-файла-статистики ("x264_2pass.log")
баланс между возможностями декодера и степенью сжатия:
--interlaced
--aq-mode режим (2, перераспределение битов между кадрами:
0 - запретить, 1 - нежелательно, 2 - желательно)
--aq-strength плавающее (1.0, уменьшение блочности и размытия на плоских и текстурированных областях)
--no-psnr (не вычислять уровень потерь по методике PSNR, сильно ускоряет сжатие)
--no-ssim (не вычислять уровень потерь по методике SSIM)
--threads число (количество параллельных потоков)
--non-deterministic (увеличить качество при использовании параллельных вычислений за счёт
потери повторяемости результата)
--no-asm (отключить ассемблерную оптимизацию)
В F10 установил пакеты x264, x264-libs, x264-devel, x264-gui и x264-gui-devel
версии 0.0.0-0.18.20080905.fc10 (core 61) из репозитария rpmfusion-free.
И дополнительно свежую версию 0.66.0-r1114-20090222 (core 66) в /usr/local (изменился смысл параметра subme;
убраны параметры b-rdo и bime; профиль High 4:4:4 lossless заменён на High 4:4:4 Predictive
в соответствии с изменением стандарта - уменьшение размера на 15%, но mplayer этого не понимает;
психовизуальная оптимизация (--psy-rd);
размер файла увеличился при "--subme 6" на 4%, скорость уменьшилась!)
./configure # MP4 и pthread по умолчанию, разделяемые библиотеки от пакета, графика не нужна
make
make install
/usr/local/include/x264.h
/usr/local/lib/libx264.a
/usr/local/bin/x264
/usr/local/lib/pkgconfig/x264.pc
В FC6 установил пакеты x264, x264-devel, x264-gui и x264-gui-devel
версии 0-0.8.20061028.lvn6 из репозитария livna (без gpac, а стало быть вывода
в формате MP4). Репозитарий freshrpms имел
более свежую версию 0.0.0-0.3.20061214.fc6, но мне не захотелось бороться с зависимостями
пакетов (ffmpeg) из разных репозитариев.
Установка дополнительно x264 svn-622 (для svn-714 требуется yasm;
для git-1038 требуется yasm 0.6.1) в FC6 в /usr/local (требуется,
чтобы выводить в .mp4, но и без пакета нельзя, т.к. включён в цепочку зависимостей):
Кодирование в MP4 с понравившимися мне параметрами с постояннм качеством
(--qp 18 эквивалентен -q 2 в mpeg2enc;
можно ещё указать --8x8dct, что даёт 2.6% сжатия, но не все программы смогут прочитать результат;
недоделанный файл MP4 смотреть нельзя;
эмулятор терминала потребляет довольно много времени на вывод статистики для каждого кадра;
использование B-кадров не даёт улучшения, если их качество уровнять с P-кадрами;
для некоторых отрывков (кодированный с хорошим качеством белый шум) не хватает P4 2.4 GHz):
В состав пакета mpeg2dec 0.3.1
входила полезная утилита mpeg2toc, которая строила оглавление DVD.
В текущей версии она пропала.
В F10 установил пакет mpeg2dec версии 0.5.1-3.fc10
из репозитария rpmfusion-free (где mpeg2dec-devel?).
В состав пакета входит программа "порчи" файлов для тестирования возможностей восстановления.
В FC6 установил пакеты mpeg2dec и mpeg2dec-devel версии 0.4.1-2.lvn6
из репозитария livna.
В FC3 свежую версию устанавливать не стал, а mpeg2toc взял из старой
(исходников которой не осталось).
FFmpeg -
видеокодек MPEG1/MPEG4/H263/RV и звука AC3/MPEG (и многое другое), оптимизированный по скорости.
Также включает библиотеки работы с контейнерами.
В дополнение к библиотекам включает
проигрыватель ffplay (с использованием SDL и интерактивным управлением), ключи:
-formats (показать список доступных форматов)
-f имя-формата
-x ширина-окна
-y высота-окна
-ss секунд-пропустить
-bytes байт-пропустить
-sync audio|video|ext
-threads параллельных-потоков
-stats
преобразователь видео и аудио ffmpeg (умеет захватывать с oss, video4linux2, x11grab)
потоковый сервер ffserver, принимающий видео/аудио поток[и] от ffmpeg и вещающий
в протоколах RTP, RTSP или HTTP (ffserver.conf)
В F10 установил пакеты ffmpeg, ffmpeg-devel и ffmpeg-libs
версии 0.4.9-0.54.20080908.fc10 из репозитария rpmfusion-free.
В FC6 установил пакеты ffmpeg, ffmpeg-devel и ffmpeg-libs
версии 0.4.9-0.34.20070204.lvn6 из репозитария livna (требует x264),
а заодно gstreamer-ffmpeg версии 0.10.2-1.lvn6, gstreamer-plugins-ugly 0.10.5-1.lvn6
и gstreamer-plugins-ugly-devel 0.10.5-1.lvn6 из репозитария livna (a52dec, asf, dvdlpcmdec,
dvdread, dvdsub, iec958, lame, mad, mpeg2dec, mpegstream, rmdemux).
Затем gstreamer-plugins-bad (bz2, cdxaparse, dfbvideosink, dtsdec, faac, faad, freeze, glimagesink,
gsm, mms, modplug, musepack, neonhttpsrc, pitch, qtdemux, sdlvideosink, speed, swfdec, trm, tta, video4linux2,
xingheader, xvid.so), gstreamer-plugins-bad-devel и gstreamer-plugins-farsight (ice, jrtp, rtpdemux, rtpjitterbuffer)
версии 0.10.3-3.fc6 из репозитария freshrpms (потянул libmms из livna - обработка mms://).
В FC3 установил пакеты ffmpeg-0.4.9-9_cvs20050517.rhfc3.at
и ffmpeg-devel-0.4.9-9_cvs20050517.rhfc3.at из репозитария at. Предварительно пришлось поставить
пакеты imlib2-1.2.0-5 (библиотека работы с изображениями) и libdc1394-1.0.0
из репозитария us (libdc1394-2.0.0-0.1.pre5.1 из dag). Версия 0:0.4.9-14_cvs20060301.rhfc3.at потянула
(разбили на куски, причём разных версий?) пакеты
libavcodec51 (0:0.4.9-14_cvs20060301.rhfc3.at), libavutil49 (0:0.4.9-14_cvs20060301.rhfc3.at),
libavformat50 (0:0.4.9-14_cvs20060301.rhfc3.at).
Проблема с зависимостями в FC3: ffmpeg хочет transcode, а тот нерелизный mjpegtools.
libquicktime -
библиотека для чтения и записи файлов в формате quicktime, включая кодеки.
Включает проигрыватель lqtplay (использует Xvideo/OpenGL и OSS/Alsa, рассказывает всё о формате дорожек)
и утилиты libquicktime_config (настройка приоритетов и параметров кодеков),
qtinfo (информация о формате дорожек), lqt_transcode (преобразование форматов видео и звука),
qt2text (извлечение текста), qtrechunk (сборка видео из кадров), qtdechunk (разборка видео на кадры),
qtdump, qtstreamize, qtyuv4toyuv (конвертация в файл формата YUV 4:2:0).
В F10 установил пакеты libquicktime, libquicktime-devel и
libquicktime-utils версии 1.0.3-4.fc10 из репозитария rpmfusion-free.
В FC6 установил пакеты libquicktime, libquicktime-devel и
libquicktime-utils версии 0.9.10-3.lvn6 из репозитария livna.
В FC3 установил пакеты libquicktime0, libquicktime1394_0,
libquicktime и libquicktime-devel версии 0.9.8 из репозитария at
(libquicktime-0.9.10-1.fc3 и libquicktime-devel-0.9.10 из репозитария dag,
потянул faac-1.24-1.1.fc3.rf.i386).
Утилита dvgrab
видеозахвата DV или HDV (MPEG-2 TS) с источника,
подключенного по FireWire (IEEE-1394) или UVC (USB Video Class, используется модуль uvcvideo из V4L2),
и удалённого управления видеокамерой. Позволяет разбивать файл по сценам или размеру
(в кадрах, байтах или секундах). Формат контейнера и кодек: avi (dv1, dv2), dv (raw), mov, jpg/jpeg,
m2t (mpeg2, hdv).
libdv
предоставляет собой библиотеку для кодирования и декодирования видео в формате DV
(видеокамеры с интерфейсом IEEE 1394, Firewire, iLink; стандарты IEC 61834, SMPTE 314M),
включая примеры использования playdv (OSS/файл и Xv/SDL/gtk/кадры),
encodedv (создание видео из отдельных кадров PPM/PGM и WAV),
dvconnect (приём видео с OHCI адаптера или передача (--send), используется video1394),
dubdv (вставить звук (WAV или OSS DSP) в видеопоток).
В F10 установил пакеты libdv, libdv-tools и libdv-devel версии 1.0.0-5.fc10.
В FC6 установил пакеты libdv, libdv-tools и libdv-devel версии 1.0.0-1.fc6.
В FC3 установил пакеты libdv4, libdv-tools и libdv-devel версии
0.103 из репозитария at. Предварительно пришлось обновить dvgrab с версии 1.6-1 до 1.6-1.1
из репозитария dag.
Библиотека zvbi
представляет средства для извлечения VBI (vertical blanking interval) кодов
(цифровой сигнал, закодированный в неиспользуемых промежутках телевизионного сигнала)
и декодирования телетекста и CC (closed caption). Использует V4L или V4L2.
Используется в AleVT, xawtv, Zapping TV. Включает прокси для разделения VBI данных между несколькими
приложениями в виде сервиса (демона) zvbid и оболочки zvbi-chains
(подменяет (LD_PRELOAD) для приложения вызовы open и read с использованием прокси вместо реальных устройств).
Утилита zvbi-ntsc-cc декодирует CC данные на стандартный вывод.
В F10 установил пакеты zvbi, zvbi-devel и zvbi-fonts версии 0.2.30-1.fc9.
В FC6 установил пакеты zvbi, zvbi-devel и zvbi-fonts версии 0.2.22-2.fc6 (0.2.24-1.fc6)
из репозитария extras.
В FC3 установил пакеты zvbi и zvbi-devel версии 0.2.21
из репозитария dag.
Библиотека aalib
(ASCII art) позволяет выводить изображения на монохромный а/ц терминал (xterm, ncurses, slang, x11, OpenGL).
Включает тестовые программы aafire, aainfo, aasavefont и aatest.
В F10 установил пакеты aalib-libs, aalib и aalib-devel версии 1.4.0-0.16.rc5.fc10.
В FC6 установил пакеты aalib и aalib-devel версии 1.4.0-0.11.rc5.fc6
из репозитария extras.
В FC3 установил пакеты aalib и aalib-devel версии 1.4.0 из репозитария dag.
Библиотека libcaca
(Colour AsCii Art) позволяет выводить изображения на цветной а/ц терминал.
Включает тестовые программы и утилиты: cacaview (просмотр графических файлов с интерактивным управлением -
масштабирование и пр.), cacafire, cacademo, cacaplay (анимация в собственном формате),
cacaserver (читает анимированный файл и изображает telnte сервер на порту 51914),
img2txt (преобразование изображения в а/ц формат: ansi, utf8, html (CSS), irc, bbfr (BBCode), ps, svg).
В F10 установил пакеты libcaca, libcaca-devel и caca-utils версии 0.99-0.5.beta16.fc10.
В FC6 установил пакеты libcaca-devel и caca-utils версии 0.9-11.fc6 из репозитария extras.
openjpeg - кодек JPEG 2000,
включая анимацию MJPEG 2000, Cinema 2K, Cinema 4K и сжатие без потерь (очень хорошее).
В дополнение к библиотекам содержит утилиты (все имеют ключ "-h")
extract_j2k_from_mj2 (извлечение кадров JPEG 2000 из потока MJPEG 2000),
frames_to_mj2 (преобразование последовательности кадров .yuv в MJPEG 2000),
image_to_j2k (преобразование изображения (.pnm, .pgm, .ppm, .bmp, .tif, .raw, .tga),
задаваемого ключом "-i", в изображение в формате JPEG 2000, задаваемое клюом "-o";
множество параметров),
j2k_to_image (преобразование из JPEG 2000 (J2K, JP2, JPT) в другой формат
(PGM, PPM, PNM, PGX, BMP, TIF, RAW and TGA)), mj2_to_frames, wrap_j2k_in_mj2.
В F10 установил пакеты openjpeg, openjpeg-libs и openjpeg-devel версии 1.3-2.fc9.
Пакет avifile предоставляет библиотеку для чтения
и разборки AVI (ASF, WMV) файлов, а также некоторый набор использующих ее утилит.
В качестве кодеков в некоторых случаях используются исполняемые DLL файлы,
предназначенные для Win32 (/usr/lib/win32).
Я использую только библиотеки (для сборки других пакетов) и avitype.
Установка avifile из CVS (CVS-0.7.48-090306-01:44-4.3.2) в F10
создать и заполнить /usr/lib/win32 (у меня сложилась исторически и содержит файлы .dll, .acm, .qtx,
.ax, .drv, .vmp, .xa и даже разделяемых библиотек .so; откуда что взялось и кому нужно
понять невозможно, поэтому таскаю с собой все, что есть; для начала можно взять
с сайта пакета avifile;
затем дополнить при установке пакетов xine и mplayer)
Установка avifile 0.7.43 в FC3 вручную (были какие-то проблемы с зависимостями в
репозитарии, а потом не стал переделывать).
Установка avifile 0.7.27-20030122 в RH8.0:
создать и заполнить /usr/lib/win32 (у меня сложилась исторически и содержит файлы .dll, .acm, .qtx,
.ax, .drv, .vmp, .xa и даже разделяемых библиотек .so; откуда что взялось и кому нужно
понять невозможно, поэтому таскаю с собой все, что есть; для начала можно взять
с сайта пакета avifile;
затем дополнить при установке пакетов xine и mplayer)
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 увеличилась с 13 кБ до 618 кБ
(правда, половина это .png) и превратилась в полноценную программу со всеми рюшечками
(0.9.7 - уже 3.8 MB, из них 2.8 MB - шрифты в формате FreeFont).
В FC6 пакет tvtime версии 1.0.1-6 имеется в комплекте.
В FC3 пакет tvtime версии 0.9.15 имеется в комплекте (1.0.2 из dag).
скопировать docs/default.tvtimerc в ~/.tvtime/tvtimerc и настроить его (самодокументирован)
Конфигурация и список станций хранятся в формате XML
(/etc/tvtime/tvtime.xml, ~/.tvtime/tvtime.xml, ~/.tvtime/stationlist.xml).
Поиск телестанций (записывается в раздел custom/SECAM;
если имеются каналы в PAL, то повторить, а потом слить результаты;
после поиска вписать имена каналов - UTF-8 - в stationlist.xml):
xanim 2.80.2 (не развивается с 1999) позволяет просматривать (и перекодировать) видео
в различных архаичных форматах (FLI/FLC, Indeo, Creative YUV, gif animated ;).
Модули могут использоваться другими пакетами.
Пакет mjpegtools предоставляет средства для захвата видео
в форматах MJPEG и YUV (YUV4MPEG, в новых версиях YUV4MPEG2),
утилиты преобразования форматов и фильтрации видео,
сжатие в MJPEG, MPEG-1 и MPEG-2, в т.ч. в виде, подходящем для записи на VideoCD и SVCD
(включая галереи неподвижных изображений), MPEG-4 (DivX).
Форматы YUV4MPEG и YUV4MPEG2 поддерживаются многими другими пакетами.
Теоретически также позволяет редактировать видео (включая переходы), но
в пакетном режиме, что удобным не назовешь. В основном, использую для удаления шума
(yuvdenoise очень хорош), обрезки кадров (yuvscaler очень быстр) и сжатия MPEG
(поддерживает все ограничения аппаратных проигрывателей и неподвижные изображения для
VideoCD/SVCD). Для программирования и записи на CD можно использовать vcdimager.
Установка в FC6 из пакетов mjpegtools и mjpegtools-devel
версии 1.9.0 из репозитария freshrpms (в livna более старая версия - 1.8.0-7 -
в пакетах mjpegtools, mjpegtools-devel, mjpegtools-gui, mjpegtools-libs).
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)
pgmtoy4m (псевдо PGM от mpeg2dec и pgmpipe преобразуются в YUV4MPEG2 4:2:0p)
y4mcolorbars (создает тестовый шаблон в формате YUV4MPEG2)
y4mshift (сдвиг изображения в каждом кадре потока)
yuvfps (вставляет или удаляет кадры в поток, подгоняя под требуемый fps;
есть yuvmotionfps)
y4mblack (создание кадров определённого цвета, не обязательно чёрного)
y4mtoyuv (преобразование из YUV4MPEG2 в EYUV для mpeg4ip)
yuvinactive (закрасить прямоугольник в каждом кадре потока)
png2yuv (преобразование последовательности PNG в 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 с удалением шумов и масштабированием;
лучше выбирать параметры отдельных программ самому, если, конечно, важен результат)
!lav2avi.sh
mpegtranscode (недоделанный скрипт для преобразования MPEG в формат, совместимый с VCD/SVCD)
yuvscaler (быстрое масштабирование YUV4MPEG2 потока, обрезание кадров,
преобразование форматов кадра 16:9 и 4:3, смена порядка полей, изменение порядка строк,
подгонка под VCD или SVCD)
yuvdenoise (подавитель шумов YUV4MPEG2 потока с использованием похожести
соседних кадров и компенсацией движения; распознает черную кайму вокруг изображения
и подавляет эффект чересстрочного изображения)
yuvmedianfilter (простенький подавитель шумов YUV4MPEG2 потока путем размазывания
мусора (не всей картинки!) по окрестностям)
yuvkineco (восстановление фильмов в формате YUV4MPEG2 потока,
покуроченных преобразованием pulldown 2-3
(преобразование прогрессивного фильма в чересстрочный NTSC удвоением каждого пятого поля);
частота кадров результата д.б. 23.97 fps,
иначе придется вставлять дублирующие кадры)
yuvcorrect, yuvcorrect_tune (пакетный и интерактивный фильтры по редактированию: последовательность
полукадров, яркость, гамма, цветовой сдвиг)
transist.flt (фильтр - переход от одного видео к другому)
matteblend.flt (фильтр - смешивание по альфа каналу)
multiblend.flt (фильтр - смешивание 2 видеопотоков различными способами)
/usr/local/info/mjpeg-howto.info*
/usr/local/man/man1: mjpegtools.1 и отдельные тексты для каждой программы
/usr/local/man/man5/yuv4mpeg.5
Рассмотрим некоторые способы применения пакета
(у меня накопился большой экспериментальный материал по mjpegtools,
но я выложу его отдельно позднее). В примерах используются программы
streamer из xawtv и lame.
Захват 10-секундного тестового отрезка с SVHS видеомагнитофона
со сжатием MJPEG в формате AVI и преобразование его в MPEG-1
(мощности P4 2400 достаточно для захвата полного кадра и еще немного остается):
Захват отдельно видео в формате YUV4MPEG2 и звука в WAV,
удаление чересстрочной развертки (deinterlace в yuvdenoise включается ключом -F,
в документации ошибка) и преобразование в MPEG-1:
Формат 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 предоставляет множество фильтров для
преобразования видеопотоков.
В FC6 установил пакет transcode версии 1.0.2-11.fc6
из репозитария freshrpms (в livna есть пакет версии 1.0.2-12.lvn6, но он тянет
более старый mjpegtools).
В FC3 установил пакет transcode версии 0.6.14 из репозитария at (1.0.0
из dag, 1.0.2 из at тянет свою версию mjpegtools).
Установка transcode 0.6.3 в RH8.0:
поставить пакет bzip2-devel, который почему-то был пропущен при установке RH 8.0
(без него не распознается ImageMagick, кстати, необходим ImageMagick-devel)
заодно RH забыла включить в ImageMagick-devel файл api.h и все, что он за собой тянет
xawtv предоставляет набор программ для управления видеоустройством
video4linux, захвата видеопотока в файл в различных форматах или вывода его на экран,
а также вспомогательные утилиты.
В FC3 установил пакет xawtv версии 3.94 из репозитария dag.
./configure --enable-xfree-ext --enable-xvideo --enable-lirc --enable-gl --enable-dv --enable-mmx
при сборке с использованием Xvideo режим grabdisplay работает лишь при запуске xawtv с ключом -noxv
если понравилось, то добавить директорию к списку сервера шрифтов X11 (/etc/X11/xfs/config),
чтобы было всегда, но я не понял зачем они нужны
v4lctl позволяет управлять устройством video4linux, что полезно не только
для удаленного управления xawtv, но и для других пакетов, которые не имеют собственных
средств управления устройством видеозахвата. Примеры:
Пример захвата видеопотока в формате YUV4MPEG2 для
дальнейшей обработки mjpegtools (композитный вход,
время записи - 1 минута, отдельная запись звука в PCM/WAV):
Пример захвата видеопотока в формате AVI/MJPEG
(требуется уменьшить качество: "-j 50" для P4 2400, а это 6 ГБ/час;
streamer -h выдает список доступных для записи форматов):
В FC6 поставил пакеты xine-lib, xine-lib-devel, xine-lib-extras
версии 1.1.4-1.fc6 (1.1.6) из extras;
затем xine-lib-extras-nonfree 1.1.4-1.lvn6 (1.1.6) и xine 0.99.4-10.lvn6 из livna;
затем xine-skins 1.10-1.fc из freshrpms. mp4 не проигрывает.
В FC3 поставил пакеты xine-lib-1.0.0, xine-lib-devel-1.0.0 и xine-0.99.3
из репозитария dag. Дополнительно потребовался пакет libXvMCW-0.9.3.
Установка в RH8.0:
получить и развернуть xine-lib-1-beta12.tar.gz (разделяемые библиотеки), перейти туда
./configure (недостатки:
aalib (мне не нужен ascii art)
Theora (открытый формат видеофайлов)
libFLAC?
libpng-config
ALSA
нужен nvtv для вывода на ТВ через видеокарту с Nvidia, нашел позднее
ранее требовалось поставить
xine-dvdnav-0.9.13
(использует libdvdread и libdvdnav) - навигация по меню DVD, но теперь он не собирается,
а навигация есть и так (большая буква N)
кроме "штатного" проигрывателя, использующего библиотеки xine-lib, имеется множество
проигрывателей, разработанных сторонними организациями;
я поставил для примера gxine-0.2.1 (проигрыватель для gnome), ничего в нем интересного не оказалось,
думаю, что и остальные такого же класса (кто-то отметился, что сделал проигрыватель для Gnome,
кто-то - для KDE)
изо всего множества дополнений осмысленным выглядит xine-vcdx-1-beta2 -
интерпретатор VCD/SVCD PBC для xine (состояние работ - альфа, будет слит
после доработок; для использования надо запускать xine с MRL vcdx://),
в новых версиях требуется предварительно ставить libcdio-0.6.tar.gz и
vcdimager-0.7.15-cdio.tar.gz
./configure
vcdimager: checking for libxml - version >= 2.3.8... no (хотя у меня libxml 2.4.23)
ошибка в /usr/bin/libxml2-config: должен выдавать -I/usr/include/libxml2/libxml
Установка MPlayer-1.0rc1 в FC6 (пакеты и кодеки остались с прошлого раза,
предварительно доставить множество -devel пакетов или доставить недостающие сейчас оп результатам первого
./configure ...):
доставить не упомянутые нигде vstream-client и vstream-client-devel версии 1.2-2.fc6 из freshrpms
доставить не упомянутые нигде live-devel версии 0-0.13.2006.08.07.lvn6 из livna
шрифт arialuni.ttf.bz2 кладём в /usr/local/share/mplayer/font/subfont.ttf (24MB!),
удаляем имя шрифта из ~/.mplayer/gui.conf, делаем символьную ссылку
~/.mplayer/subfont.ttf на /usr/local/share/mplayer/subfont.ttf
загрузить шкурки
(необязательно все ;) в /usr/local/share/mplayer/Skin/, поправить права доступа,
на одну из них сделать ссылку default
тестовый запуск: gmplayer
Установка MPlayer-1.0rc1 в FC3 (пакеты и кодеки остались с прошлого раза):
шрифт arialuni.ttf.bz2 кладём в /usr/local/share/mplayer/subfont.ttf,
удаляем имя шрифта из ~/.mplayer/gui.conf, делаем символьную ссылку
~/.mplayer/subfont.ttf на /usr/local/share/mplayer/subfont.ttf
загрузить шкурки
(необязательно все ;) в /usr/local/share/mplayer/Skin/, поправить права доступа,
на одну из них сделать ссылку default
тестовый запуск: gmplayer
Установка MPlayer-1pre8 в FC3:
установил пакеты ladspa.i386 и ladspa-devel.i386 из репозитария us
установить дополнительные кодеки в /usr/local/lib/codecs/ (я установил all-20050412,
странные права доступа у некоторых файлов)
шрифт arialuni.ttf.bz2 кладём в /usr/local/share/mplayer/subfont.ttf,
удаляем имя шрифта из ~/.mplayer/gui.conf, делаем символьную ссылку
~/.mplayer/subfont.ttf на /usr/local/share/mplayer/subfont.ttf
загрузить шкурки
(необязательно все ;) в /usr/local/share/mplayer/Skin/, поправить права доступа,
на одну из них сделать ссылку default
тестовый запуск: gmplayer
Установка MPlayer-1pre7 в FC3:
установил пакеты ladspa.i386 и ladspa-devel.i386 из репозитария us
установить дополнительные кодеки в /usr/local/lib/codecs/ (я установил all-20050412,
странные права доступа у некоторых файлов)
шрифт arialuni.ttf.bz2 кладём в /usr/local/share/mplayer/subfont.ttf,
удаляем имя шрифта из ~/.mplayer/gui.conf, делаем символьную ссылку
~/.mplayer/subfont.ttf на /usr/local/share/mplayer/subfont.ttf
загрузить шкурки
(необязательно все ;) в /usr/local/share/mplayer/Skin/, поправить права доступа,
на одну из них сделать ссылку default
тестовый запуск: gmplayer
Установка (MPlayer-0.90) в RH8.0:
убедиться, что все вышеперечисленные библиотеки и пакеты установлены
(может, кроме ogle, tvtime и xine, хотя я без них не пробовал ;)
дополнить /usr/lib/win32 подправленными кодеками
отсюда
и отсюда
дополнить /usr/lib/win32 кодеками из qt6dlls.tar.bz2 (QuickTime.qts, QuickTimeEssentials.qtx, qtmlClient.dll)
./configure --enable-largefiles --enable-gui --enable-new-conf --enable-menu
--enable-xmms --enable-dvdnav --enable-shared-pp
--with-xanimlibdir=/usr/X11R6/lib/xanim/mods --enable-qtx-codecs
(LIVE.COM Streaming Media libraries ... no)
(--enable-libfame сломано; можно скопировать ее внутрь, собрать, не устанавливать,
скопировать библиотеки (.libs) и *.h на внешний уровень; но я так устал с ними бороться :(
загрузить шрифты
и поместить шрифты нужного размера (все файлы из одной поддиректории)
в /usr/local/share/mplayer/font/ (странно, но раньше там лежали koi8r-font.tar.bz2)
загрузить шкурки
(необязательно все ;) в /usr/local/share/mplayer/Skin/ (поправить права доступа)
Просмотр 50-герцового видео в родном разрешении:
добавить в секцию Monitor файла /etc/X11/XF86Config строку
Преобразование из одного видео формата (MPEG) в другой (YUV4MPEG2)
mplayer -vo yuv4mpeg -frames 50 final.m1v
Преобразование части DVD в AVI/MPEG4 (-vop lavcdeint,hqdn3d
полезен для исправления ошибок создателей DVD из телевизионного материала;
"лишние" звуковые дорожки и субтитры будут потеряны):
Вырезать часть фильма с DVD (если размер получившегося файла
оказался более 2 ГБ, то лучше порезать главу на части с помощью -chapter,
иначе его нельзя будет записать на DVD)
Оцифровка фильма с кассеты (S-Video, AverMedia 307) "по-быстрому" (cbr - потому что
в спецификации AVI звук VBR не предусмотрен и вызывает множество проблем, quite - потому что на отладочную печать
уходит очень много CPU, не забыть отключить хранитель экрана!):
Сжатие без потерь huffyv12, адаптивная таблица (53 fps, 2.86;
без адаптивной таблицы 62 fps и 2.17; -vf expand выдаёт мусор в этом формате, приходится его обрамлять:
-vf yuy2,expand=720:576,scale):
mencoder источник -oac pcm -ovc lavc -lavcopts vcodec=ffvhuff:context=1:vstrict=-1 -o ffvhuff1.avi
Сжатие без потерь Golomb-Rice (19pfs, 4.56; декодирует также медленно; уменьшение контекста
увеличивает скорость до 20 fps и уменьшает сжатие до 4.42):
mp4encode - кодирование mp4 с помощью avi2raw, lboxcrop, faac,
mp4venc, mp4creator, xvidenc
mp4extract - извлечение дорожки из MP4
mp4dump, mp4trackdump - выдача информации о MP4
mp4info
avidump - выдача информации о AVI (собирается отдельно)
avi2raw - позволяет извлечь звук или видео из AVI в отдельный файл
(например, позволяет превратить звуковую дорожку в асмостоятельный
MP3 файл, собирается отдельно)
yuvdump - показать "сырой" файл
mp4player, gmp4player
sdl-config (!)
iptv_prog
/usr/local/lib/ (может молча заместить библиотеку от другого пакета!)
Приведу пример оцифровки VHS (SVHS) записей в почти максимальном
качестве. В принципе, можно ещё немного улучшить качество, захватывая в режиме
YUV 4:2:2 вместо YUV 4:2:0, но это потребует слишком много времени.
Предварительная подготовка:
создать новую файловую систему (ext2fs или ext3fs в режиме writeback) из расчета
1 ГБ на минуту видео
остановить хранитель экрана и прочие ненужные программы: видеозахват - это
задача реального времени, затраты процессора невелики, но непостоянны и
неотложны
модуль bttv загрузить с параметрами combfilter=1 (без этого придется захватывать
в режиме YUV 4:2:2), gbuffers=6 (меньше - будет много пропущенных кадров,
больше - будут проблемы с синхронизацией), gbufsize=0x105000 (зачем зря
память занимать)
настроить яркость, контраст и интенсивность цвета с помощью xawtv
настроить (gnome-volume-control, aumix-X11, wmix, mix2000) уровень line и igain,
сделать пробную запись с помощью "record -r 48000"
(звук в динамиках во время записи не соответствует записанному!)
второй выход видеомагнитофона подключить к телевизору, чтобы можно было
контролировать, что записывается
Захват (mono16 у меня - ac97_codec + i810_audio - не работает):
Перед очисткой можно вставить фильтр, убирающий черные полоски,
только необходимо учесть, что "окошко" полезного изображения слегка "плавает"
(VHS-источник не так стабилен, как DVD!) и придется повозиться с заданием
соотношения сторон привоспроизведении:
Кодирование в MPEG-1 с нестандартной длиной GOP и размером
видеобуфера (аппаратный плейер не воспроизведет), переменный поток (более 9 Мб/с
будет неудобно читать с DVD-RW);
можно, точнее нужно совместить с очисткой изображения;
очень медленно - 1.8 fps, сильная очистка уплощает изображени - хорошо для мультфильмов ;), занимает мало места - 210 минут на DVD-R); зачастую отключение генерации
B-фреймов (--bgroup 1) уменьшает размер на 3-5% (и ускоряет собственно кодирование
вдвое):
Средняя очистка (и деинтерлейсинг) и тщательное кодирование
(4 fps, вполне приличное качество, занимает изрядно места - 110 минут на DVD-R;
увеличение q до 6 уменьшает размер файла в 1.5 раза, но на большом экране
можно заметить небольшие дефекты изображения):
Быстрое кодирование без очистки (13 fps, могло бы быть быстрее,
если сделать нормальную буферизацию; вполне приличное качество, но занимает
много места - 90 минут на DVD-R):
Захват видео производится аналогично предыдущему случаю.
Быстрое (32 fps на P4 2400, при этом процессор свободен на 15%)
кодирование в MPEG4/AVI (кстати, максимальный размер AVI файла - 2 ГБ, в которые
влезает 1 час):
Добавление параметра ildct (фильма чересстрочная) замедляет
скорость кодирования до 30 fps. При этом размер файла уменьшился на 8%.
Добавление параметра vhq замедляет скорость кодирования до
24 fps (при этом процессор загружен почти полностью). При этом размер файла уменьшился
на 2%.
vhq совместно с ildct замедляет скорость кодирования до
21 fps. При этом размер файла уменьшился на 2%. Однако, полное удаление
чересстрочности (-vop lavcdeint) дает лучший результат (и быстрее!).
mpeg_quant не изменяет скорости кодирования, но чуть-чуть
уменьшает размер фала.
v4mv замедляет скорость кодирования до 18 fps.
При этом размер файла уменьшился меньше, чем на 1%.
Увеличение vmax_b_frames (1, 2 или 3) замедляет скорость и увеличивает размер файла.
Параметры trell, qpel также вредны.
subcmp=5 замедляет скорость кодирования c 21 fps до 14 fps.
При этом размер файла уменьшился на 1%. Остальные варианты хуже.
Использование фильтра "-vop denoise3d"
("-vop lavcdeint,denoise3d") почти не замедляет кодирование, а размер файла
уменьшается драматически (в 1.5 раза!). hqdn3d замедляет кодирование с 23 fps
до 18 fps.
mencoder -v -vop lavcdeint,denoise3d -ovc lavc -lavcopts vcodec=mpeg4:vqscale=2:vmax_b_frames=0:mpeg_quant -o filma.avi -audiofile filma.denoise.wav -oac mp3lame -lameopts abr:br=64:aq=0:mode=3 filma.yuv (одновременно со звуком - статистика выдается неполная; 2 часа на DVD; 3 часа при q=3; 4 часа при q=4, но квадратики уже видны)