Поиск по этому блогу

понедельник, 16 ноября 2009 г.

I/O Scheduler. Выбираем оптимальный.

Что нам понадобится для достижения цели?
Во-первых, установленный hdparm:
# aptitude install hdparm

Во-вторых, маленький скрипт:
# DISC="sda"; \
cat /sys/block/$DISC/queue/scheduler; \
for T in noop anticipatory deadline cfq; do \
echo $T > /sys/block/$DISC/queue/scheduler; \
cat /sys/block/$DISC/queue/scheduler; \
sync && /sbin/hdparm -tT /dev/$DISC && echo "----"; \
sleep 15; \
done
Если диск не sda, то соответствующим образом правим кусок кода с объявлением:
DISC="sda";
Запускаем и получаем подобный результат:
noop anticipatory deadline [cfq]
[noop] anticipatory deadline cfq

/dev/sda:
Timing cached reads:   1690 MB in  2.00 seconds = 844.83 MB/sec
Timing buffered disk reads:  216 MB in  3.00 seconds =  71.91 MB/sec
----
noop [anticipatory] deadline cfq

/dev/sda:
Timing cached reads:   1612 MB in  2.00 seconds = 805.98 MB/sec
Timing buffered disk reads:  208 MB in  3.03 seconds =  68.67 MB/sec
----
noop anticipatory [deadline] cfq

/dev/sda:
Timing cached reads:   1644 MB in  2.00 seconds = 822.10 MB/sec
Timing buffered disk reads:  206 MB in  3.02 seconds =  68.20 MB/sec
----
noop anticipatory deadline [cfq]

/dev/sda:
Timing cached reads:   1728 MB in  2.00 seconds = 864.06 MB/sec
Timing buffered disk reads:  214 MB in  3.01 seconds =  71.05 MB/sec
----
Первая строка чисто информационная, в ней мы просто видем тот scheduler который используется на текущий момент времени и всегда можем вернуться к нему. Затем следуют секции тестирования. Наиболее оптимальные результат выбираем вручную, он соответствует наибольшей скорости чтения мегабайт в секунду. Короче занимаемся округлениями :)
Новое значение, можно установить прямо в grub'е, изменив значение elevator=...
Далее:
# update-grub
# reboot

ps: Спасибо Сергею (snkua[at]jabber.ru) за подсказанные идеи :)
Ссылки по теме:
http://www.redhat.com/magazine/008jun05/features/schedulers/
http://www.redhat.com/promo/summit/2008/downloads/pdf/Thursday/Sanjay_Rao.pdf
http://sfdoccentral.symantec.com/sf/5.0/linux/html/sf_rac_install/sfrac_prep_install27.html

понедельник, 9 ноября 2009 г.

Мои изыскания по конвертированию avi в mp4 для проигрывания фильма на HTC Android G1 (гуглофоне) - 3 серия (заключительная)

Ура! Ура! Ура! Я его таки сделал! Вот что значит - хорошенько отдохнуть и уже на свежую голову перечитать весь материал заново.
Собственно я не знаю, будет ли работать это решение если не проделать все предыдущие "махинации" (1, 2), но факт остаётся фактом - я конвертанул видео в нужные андроиду формат и теперь есть и видео, и звук.
Для этого потребовалось всего лишь внимательней прочитать статью "Converting Videos For The Android T-Mobile G1 Phone With Linux", а если быть более точным то комментарии к ней. Там есть ссылка на уже готовый и вполне работоспособный код. У себя я его обозвал android_ffmpeg_converter, сказал ему chmod +x и вуаля! Вот, собственно, содержимое скрипта:
#!/bin/bash
# AUTHOR: M@sprackle.org
# PURPOSE: To convert one file or many files to Android format and size.
# LIMITATIONS: Get the Cancel button working in Zenity pop-up
# INSTALL: Place this script in "~/.gnome2/nautilus-scripts/Android"
# and set to execute `chmod +x ~/.gnome2/nautilus-scripts/Android`
# USE: Just right click on a file or folder that contains files you
# would like to convert to an Android format.  This was converted from
# my already used iPhone script.
#
# Where do you want all of these files to be saved?
# You should NOT have to edit below this line
SAVESPOT="~username/tmp/movie"
#
# Same as above I just wanted a single place to find my files
if [ ! -d $SAVESPOT ]; then
mkdir $SAVESPOT
fi
# Lets see if this was a single file or a Directory
if [ -f "$1" ]; then
#
# Let's cut up the name so it's not example.avi.mp4
NEWNAME=`echo "$1" | awk -F. '{print $1}'`
#
# Run the command - I found all these flags on some website.
# So far they're good.
ffmpeg -i "$1" -s 480x256 -vcodec mpeg4 -acodec libfaac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -padtop 32 -padbottom 32 $SAVESPOT/"$NEWNAME".mp4 </dev/null
#
# Ta-Da
else
#
# I placed the files in a new Directory to make them easy to find
cd "$1"
#
# Lets find the files we want to work with.
find . -type f -print0 | while read -d $'\0' file; do
#
# Lets check to see that this is a video file first
file "$file" | egrep "video:"
#
# If the egrep returns a "0" it found the phrase "video:" then continue
if [ $? != "0" ]; then
exit 1
fi
# Let's cut up the name so it's not example.avi.mp4
NEWNAME=`echo "$file" | cut -c 3- | awk -F. '{print $1}'`
#
zenity --text "Processing $NEWNAME" --info &
# Run the command - I found all these flags on some website.
#  So far they're good.
ffmpeg -i "$file" -s 480x256 -vcodec mpeg4 -acodec libfaac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -padtop 32 -padbottom 32 $SAVESPOT/"$NEWNAME".mp4 </dev/null
#
zenity --text "$NEWNAME Complete" --info &
#
# Ta Da
done
#
fi
и всё! Как говориться, приятного просмотра :)
Возможно, и даже наверняка, потребуется внести изменения в переменную SAVESPOT и указать в ней директорию куда надо сохранять итоговое сконвертированное видео. Параметры-же у этого скрипта более чем простые. Параметр один - имя конвертируемого файла.
Счастливого просмотра :)

четверг, 5 ноября 2009 г.

Мои изыскания по конвертированию avi в mp4 для проигрывания фильма на HTC Android G1 (гуглофоне) - 2 серия

Как я уже написал в предыдущем посте, конвертирование через mencoder потерпело фиаско. Я услышал звук, но совершенно не увидел видео.
Слегка подумав я всё-таки решил вершуться к идее сборки ffmpeg. В прошлом посте я упомянул о заморачивании сборки ffmpeg, но не упомянул, что я ею таки занимался. Другой вопрос, что я собирал сборку из Debian'овский исходников, полученных через apt-get:
apt-get source ffmpeg
Так как собирал я его ещё до менкодера и до сборки h264 то, наверное, вполне естественно, что полученная утилита ни в какую не хотела конвертировать видео в нужный мне формат. Так как мысль эта меня посетила только что, а я уже успел собрать ffmpeg из исходников svn, то чем бы закончился такой эксперимент сказать, к сожалению, сейчас не могу. Однако опишу мою недолгую борьбу со сборкой ffmpeg из svn. Хотя по большому-то счёту и описывать нечего, так как весь процесс описан в статье "How-To Build FFmpeg on Debian Squeeze". Пошагово:
$ svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
$ cd ffmpeg
$ ./configure \
--enable-gpl \
--enable-postproc \
--enable-pthreads \
--enable-libfaac \
--enable-libfaad \
--enable-libmp3lame \
--enable-libtheora \
--enable-libx264 \
--enable-shared \
--enable-nonfree \
--enable-libvorbis \
--enable-libgsm \
--enable-libspeex \
--enable-libschroedinger \
--enable-libdirac \
--enable-avfilter \
--enable-avfilter-lavf \
--enable-libdc1394 \
--enable-libopenjpeg \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-version3 | \
tee ../ffmpeg-configure.txt && \
make && \
sudo make install && \
make tools/qt-faststart && \
sudo ldconfig
Как видим, ничего сложного. Единственное, что надо отметить, так это то, что в /etc/ld.so.conf или его include должен быть описан каталог /usr/local/lib.

На текущий момент времени запущена переконвертация их xvid в mpeg4 следующей строкой:
$ /usr/local/bin/ffmpeg -y -i исходный_файл.avi -pass 1 -vcodec libx264 -acodec aac -vpre fastfirstpass -r 23.976 -aspect 3:2 -s 480x320 -b 480k -bt 480k -ab 96k -sameq файл_назначения.mp4

ps: Как и в предыдущем посте: ничего определённого о положительном или отрицательном результате пока сказать не могу, но о результатах обязательно сообщу дополнительно :)

ps2: Печально... Очень печально... Теперь было 10 секунд видео, но без звука... А затем ошибка - невозможно воспроизвести... Brain on! Думаем дальше! ;)

Мои изыскания по конвертированию avi в mp4 для проигрывания фильма на HTC Android G1 (гуглофоне)

Сразуже скажу, что в своей "борьбе" я руководствовался прочтением следующих материалов. Правда не все сразу они были найдены, а следовательно, будь по другому, я возможно намного раньше получил бы необходимые мне результаты.
Сначала я хотел конвертировать через ffmpeg и заморачиваться с его сборкой, но менкодер показался как-то ближе и привычней, как, собственно, и м-плеер в состав которого он входит. Но!...

И вот тут начинается самое интересное.
Можно добавить:
deb http://www.debian-multimedia.org squeeze main
и установить пакеты mplayer и mencoder, а можно собрать всё самому и попробовать установить. Чем я руководствовался когда начал сборку пакета mplayer с поддержкой кодеков h264 и xvid? Ну... Во-первых я как-то не сразу сообразил, что mencoder, в дебиановском "стандартном" и мультимедийном репозитории, не входит в состав mplayer'а. Во-вторых, ffmpeg, даже будучи установленным из мультимедийного репозитория, поддержку h264 не осуществлял. Конечно-же можно попробовать установить mencoder и попытаться осуществить конвертацию им, но... как-то лениво, ибо уже был собрат собственный mplayer_1.0svn_i386.deb, с поддержкой h264 и xvid, процессом создания которого я и собираюсь тут поделиться.
Тут я буду рассказывать всё "гладко" и, по мере возможности, последовательно хотя, поверьте, все эти ступени и шаги по ним, разбирательства с ними, заняло куда больше времени чем я тут об этом собираюсь рассказать.
Чтобы упростить себе жизнь, всё-таки внесём, для начала, вышеуказанный источник в репозиторий. Обновим свою систему as is и двинемся дальше.
Для нормальной сборки поддерджки в менкодере кодека h264 необходимо наличие в системе пакетов libfaac0 и libfaad0, плюс dev'ы libfaac-dev и libfaad-dev. Ставим их.
Затем собираем библиотеки и пакеты для поддержки h264 и xvid.
$ wget http://downloads.xvid.org/downloads/xvidcore-1.2.1.tar.gz
$ tar xzpf xvidcore-1.2.1.tar.gz
$ cd xvidcore
$ dpkg-buildpackage
$ cd ..
$ sudo dpkg -i ./libxvidcore4_1.2.1-1_i386.deb  ./libxvidcore4-dev_1.2.1-1_i386.deb
Собственно пакет поддержки xvid у нас уже есть и установлен. В дальнейшем можно будет просто устанавливать собранный deb.
Поехали дальше.
$ git clone git://git.videolan.org/x264.git
$ cd x264
$ ./configure && make && sudo make install sudo make install
$ cd ..
Ну вот, у нас есть поддержка h264. Для тех кто в бронепоезде и всё ещё не знает что такое git - просто установите пакет git-core.
Теперь перейдём к сборке. Сайт проекта www.mplayerhq.hu. На мой взгляд он нисколько не изменился с 90-х. А вот сам новый mplayer удивил. Последний раз, когда я его собирал руками, в нём не было поддержки сборки через dpkg-buildpackage - теперь есть. И это приятно. Далее всё очень просто:
$ svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
$ cd mplayer
$ DEB_BUILD_OPTIONS="--enable-gui --win32codecsdir=/usr/local/lib/codecs --enable-menu --enable-linux-devfs --enable-dynamic-plugins --codecsdir=/usr/local/lib/codecs" dpkg-buildpackage
Опции для configure передаются через переменную DEB_BUILD_OPTIONS. "Форточные" кодеки у меня лежат в /usr/local/lib/codecs, качаются так-же с сайта проекта. Внимательно следим чтобы была поддержка faac ибо... После успешной сборки у нас появляется mplayer_1.0svn_i386.deb который мы и устанавливаем через dpkg.
Естественно если нам нужно чтобы mplayer поддерживал что-то ещё, то ставим соответствующие lib'ы и dev'ы к ним, чтобы на этапе конфигурации они смогли быть найдены.
На этом этап сборки можно считать законченным.

Теперь о конвертировании. Как и было указано в ссылках выше, вызываем менкодер следующим образом:
$ mencoder исходное_имя_файл.avi -o имя_файла_назначения.mp4 \
-vf dsize=480:352:2,scale=-8:-8,harddup \
-oac faac \
-faacopts mpeg=4:object=2:raw:br=128 \
-of lavf \
-lavfopts format=mp4 \
-ovc x264 \
-sws 9 \
-x264encopts nocabac:level_idc=30:bframes=0:bitrate=512:threads=auto:turbo=1:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh

Запускаем и ждём результата. Закачиваем на наш любимый гуглофон. Пытаемся смотреть видео :)

ps: Собственно на данном этапе видео у меня как раз таки конвертируется, так что о 100% положительном результате сказать не могу. Могу лишь сказать, что оно таки начало конвертироваться, в отличии от вчерашнего дня ;) Об окончательных результатах "борьбы" сообщу дополнительно, убрав этот ps. ;)

ps2: Печально... Очень печально... Хоть и конвертанулось видео... Хоть я его нормально посмотрел на компе плеером... А вот гуглофон выдал только тихий-тихий звук, но совершенно без видео. Что-ж, буду копать дальше. Ожидайте продолжение серии статей по изысканиям ;)