Советы

конвертирование видео для просмотра на мобильных устройствах

Tags: •  •  •  •  •  • 

Пока еду на работу смотрю видео на телефоне. А чтобы упростить задачу конвертирования нормального видео в формат который без проблем показывается на мобильном устройстве использую следующий простенький скриптег.

#!/bin/bash

in=$1
out=${in%.*}.m.avi
echo $in "==>" $out
info=$(mplayer -identify $in -ao null -vo null -frames 0)
width=$(echo $info | sed -n "s/.*ID_VIDEO_WIDTH=\([0-9]*\).*/\1/p")
height=$(echo $info | sed -n "s/.*ID_VIDEO_HEIGHT=\([0-9]*\).*/\1/p")
aspect=$(echo "scale=4 ; $width / $height" | bc)
echo "width="$width ", height="$height ", aspect="$aspect
nwidth=320
nheight=$(echo "$nwidth / $aspect / 2 * 2" | bc )
echo "nwidth="$nwidth ", nheight="$nheight

ffmpeg -y -i $in -vcodec libxvid -s ${nwidth}x${nheight} -r 25 \
    -acodec libmp3lame -ac 2 -ar 44100 \
    -threads 3 -bf 2 -umv  -4mv -me full -g 250 $out

Я обозвал этот скрипт avi4mobile.sh и вызываю следующим образом

$ avi4mobile.sh video.avi

при этом создается файл video.m.avi (m - в смысле мобильный)
при конвертировании сохраняется отношение ширина/высота.

Линки в тему на сайте:

  1. Как работать с видео в формате .3gp в Linux
  2. Как проигрывать .3gp файлы?

Изображение пользователя ramok.

Сканирование и послеобработка изображений из командной строки

Tags: •  •  •  •  •  •  • 

Возникла необходимость отсканировать пару страничек с паспорта и отослать по почте. Задача решилась таким вот способом.

# настраиваем сканер 
$ sudo apt-get install sane libsane
$ rehash
$ sudo sane-find-scanner -q
found USB scanner (vendor=0x04a9 [Canon], product=0x220e [CanoScan], chip=LM9832/3) at libusb:004:004
$ sudo scanimage -L
device `plustek:libusb:004:004' is a Canon CanoScan N1240U/LiDE30 flatbed scanner

# сканируем две странички паспорта в out1.pnm и out2.pnm
$ sudo xscanimage

# конвертим .pnm в .jpg
$ convert out1.pnm ukr-pass-1.jpg
$ convert out2.pnm ukr-pass-2.jpg

# проверяем что получилось
$ feh ukr-pass*.jpg

# поворачиваем на 180 градусов если надо. (повернуть фотографии можно и прямо в feh)
$ convert -rotate 180 ukr-pass-2.jpg  ukr-pass-2.jpg

# сливаем два изображения в одно
$ montage -adjoin -geometry 1024x768 ukr-pass-1.jpg ukr-pass-2.jpg ukr-pass.jpg 

# почистим за собой
$ rm out1.pnm out2.pnm ukr-pass-1.jpg ukr-pass-2.jpg

# отошлем сканы
$ mutt -a ukr-pass.jpg

Как разрезать видео на фрагменты нужного размера

Tags: •  •  •  •  • 

Имеем: Большой видео-файл
Требуется: Разделить его на несколько маленьких, каждый из которых будет полноценным видео-файлом.
Зачем: Например, что бы записать по частям на вышедшие из моды CD-R балванки или слить большой файл частями на rapidshare или в другое место, где имеется ограничение на размер расшариваемых файлов.

Допустим, собираемся поделить файл 300.avi на два файла на границе 10MB.

1. Время и номер фрейма для точки, в которой будем резать, определить можно вот так:

% mencoder -ovc copy -oac copy -endpos 10mb -o /dev/null 300.avi
...

Video stream: 1880.602 kbit/s  (235075 B/s)  size: 8678976 bytes  36.920 secs  923 frames

2. Теперь имеем всю необходимую информацию, и воспользовавшись вот этим советом, создаем два файла:
первый:

% mencoder 300.avi -endpos 36.920 -o 300_PART1.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4

второй:
% mencoder 300.avi -ss 36.920 -o 300_PART2.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4

Готово!

P.S. не сильно разбираюсь в различных видео-форматах и кодеках. Возможно, что не с любым файлом данный пример получится.

Изображение пользователя ramok.

На каком разделе находится файл иди директория?

Tags: • 

Из-за символических ссылок на файлы и директории, а так из-за возможности монтировать директории несколько раз (mount --bind), а так же подмонтированные сетевые разделы, не всегда разберешься на каком разделе находится директория или файл. Но за вас это может сделать команда df. За одно просвятит сколько места осталось на этом разделе Ж:-)

Из примера выясняется что директория mp3 является ссылкой на директорию mapocho/mp3/ramok/, которая в свою очередь подмонтирован сетевой раздел из машины mapochco.

$ ls -ld ~/mp3
lrwxrwxrwx 1 komar komar 17 Окт  5  2005 /home/ramok/mp3 -> mapocho/mp3/ramok/
$ df -h ~/mp3
Файловая система      Разм  Исп  Дост  Исп% смонтирована на
mapocho:/usr/local/dump
                      275G  261G  245M 100% /home/ramok/mapocho

Изображение пользователя ramok.

Вставка текста из клипбоарда в терминале без мышки

Tags: •  •  •  • 

С недавних пор активно использую shift-ins для вставки текста из системного клипбоарда. Раньше пользовался только вставкой средней клавишей мышки.
Работает как минимум в xterm, rxvt и urxvt.

Изображение пользователя ramok.

Приспосабливаем vim к программированию на кросс-компиляторах

Tags: •  •  • 

Первое чего не хватает в vim при работе с кросс-компиляторами - это то что vim не правильно прыгает на подключаемые файлы в #include<..> по клавишам gf, ctrl-w f. А так же не ищет объявление переменных и функций в подключаемых файлах по [d, [D и не прыгает на объявления по [ ctrl-d, ctrl-w d. И не ищет вхождения в подключаемых файлах по [I, [ ctrl-i.

vim-у можно указать где искать подключамые файлы в переменной :set path. Например для кросс компилятора AVR можно указать

:set path=.,/usr/avr/include,,

Так же некоторые кросс компиляторы имеют свою man программу. Например avr кросс-компилятор в Debian имеет avr-man. Что бы работала клавиша вызова man из vim по клавише K можно указать нужную man программу

:set keywordprg=avr-man

Все это можно добавить или в ~/.vimrc или воспользоваться локальным .vimrc в корне проекта.

Изображение пользователя ramok.

Скрипт перевода русских слов набраных в английской расскладке

Tags: • 

Многие печатают смотря на клавиатуру и поэтому не сразу замечают что печатают по русски не переключив раскладку. Или у меня когда сижу на с плохим интернетом, то при печати в аське которая на сервере прежде чем видишь что печатаешь, проходит секунд 10 и успеваешь пару предложений набрать Ж:-)

Простенький скрипт перевода русских слов набранных в английской раскладке. Построчно переводит стандартный ввод и выводит результат на стандартный вывод. Можно как параметр скрипта указывать имя файла (мне ни разу не понадобилось правда Ж:-).

Учтите что сам скрипт сохранён в KOI8-R кодировке, а после чего iconv -f koi8-r переводит вывод в вашу текущую локаль (у меня например ru_RU.UTF-8).
Что бы не мучатся с перекодировкой можно просто скачать (не забываем переименовать и дать права на исполнение Ж:-).

#!/bin/sh
# for translation wrong typed text like: hfvjr -> рамок

cat $* |
    tr "qwertyuiop[]nm,./QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>?" \
       "йцукенгшщзхъфывапролджэячсмитьбю/ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ?" |
        iconv -f koi8-r

Пример использования:

$ 2cyr
ye xnj e dfc nfv dc. yjxm uekzkb&
ну что у вас там всю ночь гуляли&
^D
$

Способы объединения pdf-файлов

Tags: •  •  • 

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

1. Использование GhostScript напрямую. Ghostscript - пакет, позволяющий вам просматривать или печатать PostScript и PDF файлы, а также конвертировать их в другие форматы. Данный пакет достаточно часто используется, но вместе с тем, немногие пользуются его возможностями для объединения файлов PDF.

$ gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=single.pdf part1.pdf part2.pdf

  1. gs -- собственно вызов Ghostscript
  2. -dBATCH -- завершить работу Ghostscript после завершения объединения
  3. -dNOPAUSE -- производить операции без запросов пользователю
  4. -q -- не выводить сообщений (тихий режим)
  5. -sDEVICE=pdfwrite -- использовать встроенную утилиту для работы с PDF файлами
  6. -sOutputFile=single.pdf -- имя результирующего файла

Если вам часто приходится производить операцию объединения, то можно добавить в настройки вашей оболочки следующую строку, убыстряющую вызов:
$ alias pdflink='gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=./result.pdf'

Аналогично gs работает и с PS файлами.

2. joinPDF - консольная утилита для объединения, написанная на Java и требующая JRE для своей работы. Использование достаточно тривиальное:

$ joinpdf result.pdf part1.pdf part2.pdf

3. Способ для пользователей KDE: kprinter, служащий GUI для работы с Ghostscript. Нужно выбрать вывод в файл соответствующего типа (PDF,PS) и добавить объединяемые части в порядке их следования в результирующем файле.

Изображение пользователя ramok.

Введение в vimperator

Tags: •  • 

Здесь перечислены команды плагина vimperator, превращающий интерфейс firefox в некоторое подобие vim, которые лично я использую наиболее часто. Но рекомендую прочесть :help там еще много чего интересного, до чего я еще не дорос Ж:-) Например возможность писать макросы с помощью q и :map, полностью безмышковая навигация (например кликаю по линкам, копирую их буфер, выделяю текст я мышкой).

  1. o - открыть запрос на ввод урла для открытия в текущем окне. Аналог :open.
  2. O - Аналог :open <текущий-урл>.
Изображение пользователя ramok.

Как вырезать фрагмент видео в командной строке

Tags: •  •  •  • 

Вырезает из файла PinguinMST1.avi фрагмент видео начиная с 3-й минуты 54 секунд по 6-ю 11 секунды.
Результатом будет файл pinguin.avi закодированный видеокодеком mpeg4.

$ mencoder PinguinMST1.avi -ss 3:54 -endpos 6:11 -o pinguin.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4

Хронометраж можно узнать просмотрев видео в mplayer включив отсчет времени клавишей o.

Изображение пользователя ramok.

phpinfo() из командной строки

Tags: •  • 

Я сталкиваюсь с php только как админ (ну или подправить пару строчек в чужом скрипте) и часто надо возникает необходимость проверять настройки php на сервере. Для этого я создавал файлик с таким содержимым:

<?php
    phpinfo();
?>

называл его как то info.php, забрасывал в корневой каталог какого нибуть сайта на сервере и открывал в броузере.
Это был самый очевидный путь, и он меня вполне устраивал Ж:-)

Но недавно мне подсказали более простой путь узнать эту информацию прямо в командной строке:

$ php -i

Изображение пользователя alexu.

Как удалить файлы из Subversion (SVN) репозитория

Tags: •  •  •  • 

Файлы из SVN репозитория нельзя удалить подобно файлам из CVS. Для удаления могут быть разные причины, включая случайный commit или разделение одного репозитория на несколько. На будущее разработчики запланировали опцию 'obfuscate', но в настоящее время единственным способом является следующий:

svnadmin dump /путь/к/репозиторию > myrepo.dump
cat myrepo.dump | svndumpfilter exclude /путь/к/ненужным/файлам/репозитория >myrepo.clean
mv /путь/к/репозиторию /путь/к/репозиторию.bkp
svnadmin create --fs-type fsfs /путь/к/репозиторию
svnadmin load myrepo.clean

Пояснения к коду ниже:

Изображение пользователя ramok.

Нумерация терминалов в screen с 1 а не с 0

Tags: • 

Добавьте в ~/.screenrc строчку:

screen 1

И после запуска screen, первый открытый терминал будет имет номер 1 (а не 0, что многих раздражает).

зайти в screen на удалённой системе

Tags: •  •  •  •  • 

Требуется: Приатачиться к screen, запущенному на удалённой системе с минимальным количеством телодвижений.

Решение:
Не обязательно, но все таки:
1. делаем беспарольную аутентификацию как рассказно здесь
затем
2.

$ ssh -t login@host 'source .bashrc; screen -x'

Готово!

3. И на последок, что бы все вышеперечисленное таки совершалось с наименьшим количеством телодвижений, создаем скрипт:

$ cat >remotescreen
!#/bin/sh 
ssh -t login@host 'source .bashrc; screen -x'

$chmod 755 remotescreen

3.a ... или делаем алиас в любимом .*shrc
[code]

Сохранение истории команд в bash

Tags: •  •  •  • 

Часто бывает, что мы пользуемся шеллом одновременно из нескольких открытых окон терминала. При этом не менее часто бывает, что удобную и длинную команду из истории шелла из одного терминала случайно затерла история шелла из другого терминала. Избежать этого может помочь добавление следующих строк в .bashrc:

shopt -s histappend
PROMPT_COMMAND='history -a; history -n'

Изображение пользователя ak47punk.

Thunderbird и трей

Tags: •  •  •  •  •  •  • 

Наверняка, многим хотелось бы, чтобы громоптиц был запущен целый день, но постоянное нахождение его в таскбаре мозолит глаз. Тем более очень часто почтарь закрывается случайным щелчком по крестику. Для решения этой проблемы я использовал мини-программку AllTray:

$ alltray thunderbird -s -stask -i /usr/share/pixmaps/thunderbird.png

В результате, получаем почтарь, проживающий в трее, разворачивающийся при запуске и с красивой иконкой.

zsh + mc

Tags: •  •  •  •  •  • 

Давно читаю советы с этого сайта за что всем спасибо.
Вроде нигде такой совет не проскакивал, в общем мой совет:

В zsh я пользуюсь темой приветствия adam2
на днях решил её поправить чтобы показывала не только директорию и пользователя с именем машины но и кое что ещё
но не это важно, а то что за одно я решил избавиться от старого глюка связанного с этой темой,
а именно с проблемой потери размера консоли

.-(~)---------------------------------------------------------------------------------------------------------(denis@tentorium)-
`-->      
.-(~)---------------------------------------------------------------------------------------------------------(denis@tentorium)-
`--> `-->  
.-(/var/cache/dictionaries-common)----------------------------------------------------------------------------------------------
-----------(denis@tentorium)-
`--> 

т.е. после запуска mc и перехода в /var/cache/dictionaries у нас приглашение съехало.

Изображение пользователя ramok.

Демо-видео использования плагина tSkeleton в vim

Tags: •  • 

Видео, любезно предоставленное Вадимом, демонстрирует впечатляющие возможности плагина tSkeleton в vim для программирования на C++. Понятное дело что его можно использовать не только для этого Ж:-)

О том как установить и настроить tSkeleton, читайте в блоге Вадима.

Линки в тему:

  1. Шаблоны файлов в vim

Изображение пользователя ramok.

Права на запуск на файлах в репозиториях subversion

Tags: •  • 

Для того то бы хранить в репозитории исполняемые скрипты с правами на запуск, svn предоставляет специальное property svn:executable. Обычно при коммите, если файл имеет права на исполение, svn автоматически устанавливает это property. Но если вам надо уборать права на исполение, то надо удалить svn:executable напрямую.

ramok@~work/stable-1-3/ds/scripts/ svn proplist header.gif
Properties on 'header.gif':
  svn:executable
  svn:mime-type
ramok@~work/stable-1-3/ds/scripts/ svn propdel svn:executable header.gif Logo.jpg
property 'svn:executable' deleted from 'header.gif'.
property 'svn:executable' deleted from 'Logo.jpg'.
ramok@~work/stable-1-3/ds/scripts/ svn commit -m "fix permission on header.gif Logo.jpg"

Git и Subversion могут жить вместе

Tags: •  •  •  • 

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

RSS-материал