Для решения задачи конвертации под Linux
видео для просмотра на Sony PSP
существует замечательная программа - PSPVC.


Процесс установки

Качаем архив (на данный момент последний релиз за номером 0.3 и все опыты проводились именно на нём) с программой с официального сайта.

Устанавливаем необходимые для сборки пакеты (и их -devel соответствия если нужно):
- nasm
- libfaac
- liba52
- libxvidcore
- gtk+2.0

Распаковываем архив и от рута даем команду установки:
./install.sh <путь для установки> (/usr/local по умолчанию)

После запуска pspvc вы увидите удобный gtk-интерфейс, где можно выставить параметры видео, запустить конвертацию и сгенерировать preview.
Описывать его подробно смысла нет.

Подводные камни

Возможно на вашем дистрибутиве программа соберётся без проблем (на Ubuntu 7.04 собирается без проблем), однако у меня (на ALTLinux) без них не обошлось.
Опишу подробней:

1) Проблема:
программа просто не собирается с ошибкой вида:
ffmpeg/libswscale/swscale_template.c
gcc is unable to create an executable file.
If gcc is a cross-compiler, use the --cross-compile option.
Only do this if you know what cross compiling means.
C compiler test failed.
If you think configure made a mistake, make sure you are using the latest
version from SVN. If the latest version fails, report the problem to the
ffmpeg-devel@mplayerhq.hu mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "config.err" produced by configure as this will help
solving the problem.
ERROR during configure FFMPEG

Решение:
В строке #56 файла install.sh убрать флаг "-lX11"

2) Проблема:
не компилируется ffmpeg с ошибкой (возможно из-за старой версии libxvidcore):
ERROR during configure FFMPEG

Если запустить компиляцию ffmpeg вручную видна суть ошибки:
vid_rc.o xvid_rc.c
xvid_rc.c: In function `ff_xvid_rate_control_init':
xvid_rc.c:70: error: structure has no member named `vbv_size'
xvid_rc.c:71: error: structure has no member named `vbv_maxrate'
xvid_rc.c:72: error: structure has no member named `vbv_initial'
make[1]: *** [xvid_rc.o] Ошибка 1
make[1]: Leaving directory `...'
make: *** [lib] Ошибка 2
ERROR during compilation or installation of FFMPEG

Решение:
Не самое элегантное и безопасное, но рабочее решение - закомментировать строки 70-72 в файле /pspvc-install-0.3/work/ffmpeg/libavcodec/xvid_rc (лучше перепаковать его в архив с ffmpeg, что идёт с программой, и удалить старую рабочую директорию work перед новой попыткой компиляции) :
//xvid_2pass2.vbv_size= s->avctx->rc_buffer_size;
//xvid_2pass2.vbv_maxrate= s->avctx->rc_max_rate;
//xvid_2pass2.vbv_initial= s->avctx->rc_initial_buffer_occupancy;

Расскажу как я справился с довольно типовой задачей
настройки роутера Linksys WRT54GL.

Требовался выход в интернет посредством VPN и одновременная работа локальной сети.
Если у вас есть достаточный опыт в Linux и нет страха перед командной строкой, то лучшим решением наверно будет воспользоваться прошивкой OpenWRT.
Это описание же расчитанно на неискушенного пользователя, и хоть
в своих экспериментах я активно пользовался консолью роутера (через ssh), данное описание позволяет настроить VPN используя исключительно web-интерфейс dd-wrt.


1) Ставим прошивку dd-wrt.
(Мне достался уже прошитый девайс =) , но в сети полно инфы о том, как прошить роутер, ничего сложного в этом нет. Возможно советы подойдут и для стандартной прошивки, я не проверял).
Испытания проводились на версии Firmware: DD-WRT v23.
Далее будем считать, что вы уже настроили локальную сеть,
т.е. вбили свой локальный ip/dns, либо клонировали mac-адрес и провайдер сам выдал все настройки.

2) В веб-интерфейсе открываем вкладку Administration -> Services, в разделе "pptp Client" ставим галочку "Enable". Жмём "Save settings".

3) В обновившемся поле "pptp Client" вбивает свои имя, пароль
и адрес vpn-сервера.
В полях "Remote Subnet" и "Remote Subnet Mask" оставляем нули,
если хотим через vpn лазить по всему интернету.

4) Идём в Setup -> Advanced routing
Вбиваем пути для локалки (обычно выдаются провайдером).
Главное, чтобы был путь до vpn-сервера, ну и до dns-сервера.
Базовые настройки на этом закончены.

5) Однако vpn может и не подняться из-за неподходящих для
вашего провайдера настроек, которые идут с dd-wrt по умолчанию.
Остановимся подробней на этом нетривиальном случае.
При включении роутера конфигурационный файл с опциями vpn
находится в файле /tmp/pptpd_client/options.vpn.
Соответственно этот временный файл нам и нужно поправить.
В моем случае напрмер нужно было отключить шифрование,
удалив соответствующую строку в конфиге:
"mppe required,no40,no56,stateless".
Это можно сделать редактором sed после включения роутера
с помощью команды:
cd /tmp/pptpd_client/; cp options.vpn
bak; cat bak|sed /mppe/d > options.vpn; rm bak
Этой командой мы перешли в директорию с конфигурационными файлами; скопировали файл настроек в файл bak;
отфильтровали полученный файл sed'ом >
записали результат вместо старого файла настроек;
удалили временный файл bak.

Стоит конечно прописать это в автозагрузку с небольшой поправкой:
т.к. временный файл создается не сразу, следует поставить небольшую
задержку (sleep), скажем в секунд 50.
Для этого открываем вкладку Administration -> Diagnostics,
жмём Run, вписываем в текстовом поле команду:
(sleep 50; cd /tmp/pptpd_client/; cp options.vpn bak;
cat bak|sed /mppe/d > options.vpn;rm bak
)&
(одной строкой) и жмём "Save Startup".

Данный способ изменения настроек может показаться не самым удобным, однако нельзя не отметить его гибкость.
Разобравшись как работает редактор sed можно варьировать настройки файла options.vpn как угодно.

6) Теперь можем перегрузить девайс:
на вкладке Administration жмём кнопку "Reboot Router"
После перезагрузки ждём отведённые нами 50 секунд и vpn-соединение должно работать.

UPD-2! Версия с GUI здесь.
UPD! Советы в большей степени касаются первоначальной версии framegrabber.
Обновленная версия (консольного) скрипта и описание к нему здесь!

Иногда возникает необходимость быстро создать серию скриншотов какого-либо видео, желательно аккуратно скомпонованных в одном файле (такое желание естественно например если вы релизите фильм на торрент-трекере).

Под небезызвестной ос windows есть множество утилит, которые с этим успешно справляются (см. Image Grabber 2).
Такого класса программы есть и под Linux, однако они обычно тянут за собой кучу зависимостей в виде библиотек типа xine-lib или того хуже qt4 (как тот же QFrameCatcher).

Я предлагаю вместо этого воспользоваться замечательным скриптом (к сожалению не известного мне автора):


#!/bin/bash
set +x

usage="framegrabber -h for help"
print_help()

{ cat <<'EOF'


Usage : framegrabber [-n stills] [-s size] FILE

Framegrabber is designed to extract stills from a video that is seekable and supported by
Mplayer. Framegrabber then combine them in a mosaic image allowing preview of the movie. Number of frames to extract and size of the frames can be modified via options.

Framegrabber depends on Mplayer and Imagemagick

Options :
-h : print this help message
-n : number of stills to extract
-s : size of each stills

framegrabbing -n 20 -s 100 my_video will create a mosaic of 20 stills of 100 pixels each.



EOF
}

while getopts ":n:s:h" option
do

case $option in
n ) n=$OPTARG;;
s ) s=$OPTARG;;
h ) print_help; exit 1;;
\? ) echo "Unknown option"; echo $usage; exit 1;;
* ) echo "Unknown option"; echo $usage; exit 1;;

esac
done



(( ! n )) && n=20

(( ! s )) && s=150


shift $(($OPTIND - 1))

_NFILE="$1"

_NBFRAME=$n
_SIZEFRAME=$s

_DIR=${_NFILE%/*}
_FILE=${_NFILE##*/}

(( ! $_FILE )) && print_help

cd "$_DIR"
pwd
echo "$_FILE"
mkdir sctmp
_SECONDS=`mplayer -ao null -vo null -frames 1 -identify "$_FILE" | grep ID_LENGTH= | cut -d"=" -f 2`
_FPS=`mplayer -ao null -vo null -frames 1 -identify "$_FILE" | grep ID_VIDEO_FPS= | cut -d"=" -f 2`
_INTSEC=`awk -v var="$_SECONDS" 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'`
_INTFPS=`awk -v var="$_FPS" 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'`
_STEP=`expr "$_INTSEC" / "$_NBFRAME"`
#_STEP=`expr $_STEP2 / $_NBFRAME`
_INTSTEP=`awk -v var="$_STEP" 'BEGIN { rounded = sprintf("%.0f", var); print rounded }'`
_SECSTEP=$_INTSTEP

_MAXFRAME=`expr 100 + $_NBFRAME + 1`

echo $_SECONDS
echo $_FPS
echo $_STEP

for i in `seq 100 $_MAXFRAME`

do
mplayer -really-quiet -ss "$_SECSTEP" -vo jpeg -frames 7 "$_FILE"
_SECSTEP=`expr $_SECSTEP + $_INTSTEP`
mv 00000007.jpg sctmp/$i.jpg
done

rm 0000000*.jpg
pwd
cd sctmp
mogrify -resize "$_SIZEFRAME"x1000 *.jpg
montage -geometry +2+2 -tile 4 *.jpg "$_FILE".png
rm *.jpg
convert "$_FILE".png "$_FILE".jpg
rm *.png
mv "$_FILE".jpg ..
cd ..
rmdir sctmp
echo "Finished"




Скрипт использует mplayer и imagemagick, которые входят в состав любого desktop-ориентированного дистрибутива. Соответственно с поддерживаемыми форматами проблем не предвидится (mplayer).

Использовать его проще простого:
$ framegrabbing -n 8 -s 320 video.avi
, где 8 - количество требуемых скриншотов, а 320 - их размер.

Результат выполнения данной команды должен выглядеть примерно так:

Важно! В скрипте автор с помощью mplayer'а создает по 7 скриншотов за раз и для конечного файла использует именно седьмой, однако mplayer (по крайне мере на некоторых файлах) не всегда выдает все 7. Поэтому имеет смысл брать именно первый скриншот, а имеено следует в строке "mv 00000007.jpg sctmp/$i.jpg" (строка 87) заменить 00000007.jpg на 00000001.jpg, т.е. всегда забирать первый файл.


 

Copyright © 2007 DamnSmallBlog. Content is licensed under Creative Commons Attribution-Noncommercial.

Design: GeckoandFly and Blogcrowds.