понедельник, 5 марта 2007 г.

Запись с tv tunera

Как известна сила linux не в монстровидных программах, а в мелких утилитах сочетание которых может сделать все на свете.

Итак есть tvtuner beholder - настроен подключен.
Требуется производить запись по рассписанию.
Воспользуемся streamer, at, и тд.

Для начала пишем скрипт для записи, я некодирою на лету ибо не люблю выпавших кадров и отставшего звука.
record.sh
#!/bin/sh
# usage record 1:25:00 352x240 /dir
cd $3
name=`date +%d.%m.%y_%H:%M`
streamer -t $1 -s $2 -r 24 -o $name.yuv -O $name.wav -F stereo
echo $name

пример использования record.sh 1:25:00 352x240 /media/stuff/video - пишет час двадцать пять минут несжатого видео в папку /media/stuff/video видео размером 352*240
получаем два файла типа 2007.03.02_12:23.yuv - видео и 2007.03.02_12:23.wav аудио

Пишем второй скрипт для кодирования
encode.sh
#!/bin/sh
cd $2
name=$1
nice -n 20 mp2enc -o tmp_audio.mp2 < $name.wav
nice -n 20 mpeg2enc -v 0 -f 8 -o tmp_video.m1v < $name.yuv
nice -n 20 mplex tmp_audio.mp2 tmp_video.m1v -o $name.mpg
rm tmp_audio.mp2;rm tmp_video.m1v;rm $name.wav;rm $name.yuv

Скрипт корявый ему нужно отдельно еще путь к папке помимо имени файла передавать, но меня это не тревожит. Кто захочет легко исправит( basename )
nice -n 20 говорит запустить с низким приоритетом процесы кодирования. Вдруг я буду работать за компьютером в это время.

Итак осталось найти шедулер. А что его искать, есть в любом *nix называется at
формат даты смотрите man at, по мойму он поймет вас в любом случае.
Я обычно использую at today 13:12 или at now +29 min

Еще одна подсказка, если вы хотите записать видео по расписанию, а кодировать его во время простоя компьютера - используйте batch. Это типа at только запустит при простое.

Ну и напоследок живой пример, пишем видео по расписанию и перекодируем потом при простое компа.
at now 1:00
record.sh 30:00 352x240 /media/files/ | tail -1 > filename # сораняем имя получившегося файла
echo encode.sh `cat filename` /media/files | batch