вторник, 16 декабря 2008 г.

ffmpeg или видео на телефоне

Случилось приятное =), у меня появился телефон с 8Gb карточкой который крутит музыку и видео. Естественно захотелось на нем смотреть фильмы. Естественно ffmpeg должен помочь.

На повестке дня были следующие проблемы:
  • размер файла с фильмом
  • качество картинки
Сразу о грустном. Добиться отличного качества при размере экрана 320x240 не возможно. Как я только над параметрами не издевался. Перечитал половину интернета. Но если к задаче подойти практично, то все не так уж и плохо.

Выбирал из 3-х вариантов кодеков mpeg4 (libxvid, mpeg4, h264). Качество получаемого изображения, при настройках по умолчанию, примерно одинаковое, особенно учитывая устройство просмотра и то, что в качестве исходного изображения уже был сжатый avi файл. Возможно, при налчии качественного исходного материала, можно добиться лучшей картинки, но в моем случае это не актуально.

По результатам тестов я выяснил, что при одинаковом качестве, кодек h264 выдает результат наилучший по качеству (субъективно) и самое главное, размер итогового файла на 10-15% меньше. Меня это вполне устроило, не смотря на почти двух кратный проигрыш по времени. Для себя поставил галочку, если буду торопиться - mpeg4.

Теперь в общем то переходим собственно к самому ffmpeg. Разберем мой простенький тестовый пример:

#ffmpeg -i kino.avi -vcodec h264 -acodec libfaac -ac 2 -ab 32kb -s 320x240 kino.mp4
  • -i kino.avi - исходный файл
  • -vcodec h264 - указывается кодек (libxvid, mpeg4)
  • -acodec libfaac - кодек для звуковой дорожки
  • -ac 2 - количество каналов. 2 - стерео, 1 - моно. Надо проверить - играет ли пой телефон 5.1 звук =). Если параметр не указан - берутся характеристики из исходного фильма.
  • -ab 32kb - битрейт звуковой дорожки. Я осознанно зажал его в 32kb, т.к. объемного звука на динамиках телефона =) не добиться. 32kb достаточно для нормальной передачи звука и минимальных издержек на звуковую дорожку.
  • -s 320x240 - размер кадра для конвертированного фильма
  • kino.mp4 - готовый фильм
При экспериментах, чтобы не ждать пока перекодируется весь фильм, я развлекался на одном кусочке. Вырезать кусок фильма при помощи ffmpeg можно используя следующие опции:
  • -ss 150 - отступить от начала файла 150 секунд, можно указывать время hh:mm:ss
  • -t 60 - конвертировать 60 секунд видео от текущей позиции
Так как не все фильмы в формате 4:3, то надо вдумчиво подходить к параметру -s, и выбирать значения в зависимости от размера файла оригинала. Например мне попался TV-рип неплохого качества 720x576 но у него были черные полосы по бокам и сверху и снизу. Я указал для итогового файла заранее больший размер и поставил опции обрезания кадра по сторонам таким образом, что результирующий размер, точно вписывался в 320x240. Нижу привожу пример необходимых опций:

-s 360x288 -croptop 24 -cropbottom 24 -cropleft 20 -cropright 20 kino.mp4

Для оценки изменений я вырезал некоторые кадры и сравнивал, что в итоге получается, для этого опять же подошел ffmpeg:

#ffmpeg -i kino.mp4 -ss 10 -vframes 1 -an -sameq -f mjpeg kino.mp4.jpg

Опция -ss означает из какого места вырезать кадр. Указывается в секундах от начала ролика или в формате hh:mm:ss.

Вот в общем то и все =). Загоняю свои любимые фильмы в телефон.

четверг, 4 декабря 2008 г.

Lotus Notes 8

Пришло время ставить клиента Lotus на моем ноутбуке под Gentoo Linux. Я взял версию Lotus Notes 8.0.1, т.к. это единственная версия с русским интерфейсом на текущий момент.

Для установки необходимо провести подготовительные работы:
1. Распаковать архив с дистрибутивом.
2. Скопировать из папки deploy файл instal.xml в каталог /root
3. Создать каталог mkdir /etc/lotus/notes и в нем создать пустой файл notesrc.
4. Выставить права chmod -R 777 /etc/lotus
5. Запустить установку ./setup.sh

Т.к. я не использую gnome мне потребовалась пара библиотек
gnome-base/libgnomeprint
gnome-base/libgnomeprintui

По ходу жизни выявляются дополнительные библиотеки
gnome-base/libgnome
gnome-base/libgnomeui

Установка завершена, запускаем Lotus и настраиваем стандартным о образом.

З.Ы. После установки нашел мега-косяк =). Шрифты! В Lotus Notes есть настройки шрифтов, но они действуют не на весь Lotus, а тольк на часть (спасибо, что на бОльшую часть). Суть проблемы заключается в том, что в диалогах, местами, используются bitmap шрифты. Первый же диалог (ввод пароля) расползается по экрану, что хочется застрелиться. В моей системе Lotus подхватывал шрифт растровый шрифт 75dpi Adobe Courier 12, но отрисовывал его ОООгромными буквами на пол экрана.

Исследование этого косяка привели к тому, что надо менять приоритеты и ставить другой шрифт. Это полумера - внешний вид достаточно убогий. Вторая полумера - можно отключить bitmap шрифты в fonts.conf, тоже не шикарно, а в моем случае это приводило к использованию очень мелкого шрифта.

В общем, неприятный осадок остался. А самое обидное, что я так и не подошел к разгадке. Рабочие версии:
  • Собака порылась между отрисовкой библиотекой freetype растровых шрифтов и используемом DPI.
  • Как вычислить точно, какой шрифт запрашивает ПО у xorg?
  • Как, при отключении растровых шрифтов, управлять их заменами, включая размер?
Пока я просто подобрал более приличный шрифт для Lotus.

среда, 3 декабря 2008 г.

UTF8 в Gentoo

Эта история бесконечна. Сколько раз ставил Gentoo, ровно столько же раз и искал как русифицировать в UTF8 =).

Начнем с ядра. Надо правильно выставить опции кодовых страниц:

File systems --->
DOS/FAT/NT Filesystems --->
<*> VFAT (Windows-95) fs support
(866) Default codepage for FAT (по умолчанию будет 866 таблица для FAT)
(utf8) Default iocharset for FAT (UTF мы используем для ввода вывода)
# после установок для фат не нужно будет трогать fstab
-*- Native language support --->
(UTF8) Default NLS Option
<*> Codepage 437 (United States, Canada)
<*> Codepage 866 (Cyrillic/Russian)
<*> Windows CP1251 (Bulgarian, Belarusian)
<*> ASCII (United States)
<*> NLS ISO 8859-1 (Latin 1; Western European Languages)
<*> NLS ISO 8859-5 (Cyrillic)
<*> NLS ISO 8859-15 (Latin 9; Western European Languages with Euro)
<*> NLS KOI8-R (Russian)
<*> NLS UTF-8


Для консоли правим файлы (новый вариант):

#/etc/conf.d/keymaps:
KEYMAP="ru" (переключение по Ctrl|Shift)

#/etc/rc.conf
UNICODE="yes"

#/etc/conf.d/consolefont
CONSOLEFONT="ter-k14b" (из пакета шрифтов Terminus ter-k14b или ter-k14n, там есть варианты)


#.bash_profile
export LC_ALL=""
export LANG="ru_RU.UTF-8"


В общем это все. Дальше уже надо лезть разбираться с конкретными приложениями.

Для KDE и прочего, нужны шрифты Windows, они в пакете media-fonts/corefonts. Народ рекомендует их брать из Windows, т.к. в пакете только Arial, Courier New, Times New Roman, а Tahoma и т.п. нету. Порядок действий нашел на gentoo.blog.ru:

#mkdir /usr/share/fonts/msfonts
#cp /mnt/windows/WINDOWS/Fonts/*.ttf /usr/share/fonts/msfonts/
#cd /usr/share/fonts/msfonts
#chmod 644 *
#mkfontdir
#mkfontscale
#fc-cache -fv

#nano /etc/X11/xorg.conf

# FontPath "/usr/share/fonts/corefonts"
FontPath "/usr/share/fonts/msfonts"


Для пакетов, в /etc/make.conf поставил в USE параметр unicode.

ntfs-3g и Gentoo (используем sudo)

Цель: под правами пользователя монтировать диски ntfs на чтение/запись при использовании ntfs-3g.

Решение 1: Описал в предыдущем посте - ntfs-3g и Gentoo. Из недостатков - безопасность. Пользователю надо давать права на дисковые устройства и взводить бит S на исполняемом файле.


Решение 2: Использование sudo.

В интернет было много решений, но они все несколько кривые. В итоге просуммировав все известное выкрутился следующим образом:

Установил sudo и ntfs-3g:

#emerge sudo
#emerge ntfs3g


Создал скрипт для монтирования /sbin/mount.ntfs.sh (как оказалось очень удобный, в нем можно много чего полезного понаделать):

#!/bin/bash
sudo /bin/ntfs-3g "$@"


И создал линк на скрипт для выполнения монтирования ntfs:

#ln -s /sbin/mount.ntfs.sh /sbin/mount.ntfs

Добавил, через файл /etc/sudoers, разрешение на запуск /bin/ntfs-3 без пароля для группы users:

%users ALL=(ALL) NOPASSWD: /bin/ntfs-3g

После всего этого заработало монтирование под пользователем, включая KDE. По хорошему еще можно повозиться с файлами /sbin/mount.ntfs.sh и /etc/sudoers для ограничения дисков которые можно монтировать, но это мне уже показалось перебором.

вторник, 2 декабря 2008 г.

ntfs-3g и Gentoo

Не понимаю почему, но монтирование ntfs томов в режиме чтение/запись по прежнему имеет ряд проблем. На сегодня, если очень нужно, для записи в ntfs под Linux существует драйвер ntfs-3g. Для чтения данных проблем не существует, а с записью проблемы. Но начнем по порядку. Т.к. встроенный в ядро драйвер позволяет осуществлять только чтение ntfs, наш выбор однозначен - ставим ntfs-3g.

Для начала, проверяем что в ядре Linux установлена необходимая опция:

"File Systems -> Filesystem in Userspace support"

Без нее не установится пакет ntfs3g.

Установка пакета обычная - emerge ntfs3g, но для последующей работы пользователей выставляем ключ suid. Далее создаем точку монтирования (/mnt/mount-point) и задаем права на чтение/запись для группы disk. В группу disk надо внести всех пользователей которые потом будут монтировать этот диск.

Проверяем, что на /bin/ntfs-3g установлен бит S и при его отсутствии исправляем

#chmod u+s /bin/ntfs-3g

Для монтирования пользователем, подставляем ссылку:

#ln -s /sbin/mount.ntfs.sh /sbin/mount.ntfs

В файле /etc/fstab вписываем строчку с опцией users для возможности монтирования пользователем:

#/dev/volume /mnt/mount-point ntfs-3g users,noauto 0 0

После этого пользователь сможет монтировать файловую систему под своими правами. Вместо типа файловой системы ntfs-3g можно указать auto.

Все хорошо, за исключением одного нюанса - для подключения раздела ntfs в режиме записи, необходимо на устройство /dev/volume установить разрешение на запись. Тут я сдался. Выставил в /etc/fstab опцию ro и пошел читать документацию.

понедельник, 1 декабря 2008 г.

RAID1 на материнской плате.

Сейчас, на многих компьютерах, присутствует возможность организовать RAID на жестких дисках SATA . В основном - это не настоящий RAID, а некий гибрид. Фактически, при наличии специальных драйверов, при настройке соответствующего RAID через BIOS, операционная система видит некий жесткий диск, а Linux по прежнему видит отдельные жесткие диски.

Задача стояла простая, обеспечить сохранность данных. По этому в компьютер было установлено 2 одинаковых жестких дисках и через BIOS собраны в RAID1 (зеркало по нашему, mirror по ихнему =)). Создавать зеркало программными средствами Linux не хотелось, т.к. доступ к данным на таком массиве из под Windows теоретически не возможен, а необходимость иногда перекинуть файлы из одной OS в другую есть.

Вменяемого HowTo я не нашел, но начитался много сопутствующей литературы =). Т.к. дело было в Gentoo, то и действия у меня описаны для неё. Нужно установить 2 пакета:
  • sys-fs/device-mapper
  • sys-fs/dmraid
При установке dmraid, device-mapper ставится по зависимостям.

После задания RAID1 в BIOS и установке необходимых пакетов все предельно просто - dmraid -s показывает, что он из RAID видит. Что делать если не видит, науке не известно. В моем случае он честно разглядел созданное зеркало. После этого, командой dmraid -ay, активируем массив. В папке /dev/mapper будет 2 файла, один control (есть всегда), второй - абракадабра из букв как обзовет себя массив и в каталоге /dev появится ссылка на новое устройство /dev/dm-0 - это и есть устройство собранное в софтово-биосный RAID. Fdisk-ом делаем разделы. Деактивируем массив dmraid -an и заново активируем dmraid -ay. Теперь у нас появляется несколько устройств /dev/dm-N, где N номер раздела, при этом сам RAID имеет номер 0. Создаем файловые системы и работаем.

Есть один нюанс, состоящий из двух хитростей. После перезагрузки у вас не будет ни одного устройства /dev/dm-N/. Для того, чтобы при загрузке создавались нужные нам устройства, надо их определить в файле /etc/dmtab:

#dmsetup table >> /etc/dmtab

При этом, необходимо проверить, что первой строкой идет описание RAID, а следующими строками - разделы, иначе получится циклическая ссылка и компьютер не сможет загрузится.

В общем, все достаточно просто, но это ни где не описано или я не умею искать документацию. При любом раскладе, на текущий момент каталог home у меня переехал на RAID. Надежность такого решения увидим потом =).