Видеомонтаж в консоли Linux

Видеомонтаж в консоли Linux

Линукс считается лучшей платформой для работы с видео. На базе ОС Линукс строятся целые центры по обработке видео и звука. Множество профессиональных видео студий работает с Линуксом. Например пост обработка всем известного мультфильма Мадагаскар делалась именно в Linux. Список известных картин созданных с помощью ОС Линукс, можно продолжать бесконечно, но мы сегодня будем говорить о другом, а именно о том чем Линукс может помочь в обработке видео домашнего происхождения.

Для этого есть прекрасный набор программ. Сразу оговорюсь что людям вообще не знакомым с Линуксом придётся немного разобраться. Но это стоит того, точнее это не стоит нечего :), ведь почти все программы под Линуксом бесплатны.

Самым лучшим и популярным под линуксом для обработки видео считается mencoder. Эта программа работает в терминальном режиме. И на самом деле это огромный плюс. Поскольку обработку видео можно автоматизировать с помощью скриптов. Кстати большинство серверов онлаин видео, используют именно эту утилиту для авто обработки видео на сервере. Но если вы все таки только только перешли на Линукс и командная строка вызывает у Вас панический ужас не волнуйтесь у mencoder’а есть визуальный интерфейс. Просто по умолчанию он отсутствует. Позже я расскажу как установить графический интерфейс. Но для начала все же придётся немного разобраться в командной строке.

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

MEncoder — компьютерная программа для конвертирования аудио и видеоформатов. Поддерживает большинство существующих кодеков и медиаконтейнеров. Является частью проекта MPlayer. Использует для своей работы библиотеку libavcodec.

Называется эта утилита mplayer и включает в себя ещё множество маленьких программ которые выполняют различные вспомогательные задачи. Хотя официально они позиционируют себя как просто проигрыватель медиа файлов, все остальные проекты как бы отдельные или доп функционал. Как там на самом деле ХЗ, но они всегда идут вместе, и дург без друга работать не могут. В этой статье я познакомлю Вас почти со всеми программками выключенными в сборку mplayer’а. Официальный сайт программы mplayer.

Для начала нам нужно установить те программы с которыми мы будем работать. Кстати в большинстве дистрибьютивов Линукса mencoder и mplayer стоят по умолчанию. Поэтому проверьте их наличие перед тем как устанавливать. Тем у кого нет, нужно ее установить. Делается это для Debian»овых так:

apt-get install mencoder mplayer

Примеры простых и часто используемых команд:

Конвертируем из mpg в avi.

mencoder slobodnasrbija1912.mpg -o slobodna.avi -ovc lavc -oac lavc

Разбиваем avi файл на части

avisplit -s 37 -i bagow-001.avi

Из avi делаем flw

mencoder INPUT.avi -ofps 25 -o OUTPUT.flv -of lavf -oac mp3lame -lameopts abr:br=64 -srate 22050 -ovc lavc -lavcopts vcodec=flv:keyint=50:vbitrate=300:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -vf scale=320:240

Порубить, разбить, порезать flv на части

ffmpeg -i input_file.flv -ss 00:00:00 -t 00:30:00 -vcodec copy -acodec copy output_file_1.flv

ffmpeg -i input_file.flv -ss 00:30:00 -vcodec copy -acodec copy output_file_2.flv

Вырезать кусок из avi

mencoder -oac copy -ovc copy -ss 00:00:00 -endpos 00:00:02 video.avi -o kusok.avi

Конвертировать mts|m2ts файлы в avi

mencoder 00001.mts -o 1.avi -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=10000 -fps 60 -vf scale=1140:1080

Проиграть видео в ASCII

mplayer -vo aa [name_of_videofile]

Нашел на хабре полезную статейку. Оригинал здесь

Демон конвертации видео в FLV

Решил поделиться недавно написанным кодом демона для видеохостинга. Принцип демона прост. Демон смотрит в папку, куда загружаются видеофалы, и при появлении там новых, копирует в другую папку, запускает в фоне процесс конвертации, создает превьюшку, и копирует полученное видео в папку пользователя.

Скрипт написан на bash, поэтому в режиме демона его надо запускать командой nohup ну или screen. Недостатком является отсутствие контроля нагрузки. Если загрузка файлов активная, то реальна перегрузка сервера. У нас пока этот вопрос не критичен, но тем кому такое решение не подойдет, проще всего использовать команду flock для создания очереди процессов.

Самые важные параметры работы демона, можно указать через командную строку. Получить список команд вы можете, запустив скрипт с параметром -h.

Обратите внимание на параметр -u. С его помощью можно указать местоположение папок пользователей, куда будет копироваться конвертированное видео. Структура папок задана жестко, и что бы её изменить, придется править скрипт. Но по умолчанию структура директорий такова: /video. То есть, в папочку video будут складываться конвертированные в формат FLV ролики.

И еще такой момент. С помощью параметров -s и -t можно указать директорию источник и промежуточную директорию для конвертации, соответственно. Важно знать, что файл в директорию, указанную в параметре -s (по умолчанию /var/videoinput), должен загружаться с именем _., где это ID пользователя (то есть название его папки), а — ID файла, например ID записи в БД.

Превью будет скопирована туда же куда и файл видео, с таким же именем, но расширением png. Превью берется с 16-й секунды. В принципе, по хорошему, надо определять длину ролика (он то может быть и короче 16 сек), но это оставляю вам в качестве самостоятельной работы 😉

Из кода ясно, но все таки опишу необходимый софт для работы скрипта:

mencoder — собственно конвертация
mplayer — для вырезания превью
convert — ImageMagik утилита для ресайза превьюшки
flvtool2 — для записи мета-информации в FLV
#!/bin/bash
# folder_monitor.sh
# This is a daemon shell script for monitoring video input directory.
#
#определяем значения параметров по умолчанию
SRC_DIR=/var/videoinput
TRG_DIR=/var/videooutput
PARAMS='-ovc lavc -lavcopts vcodec=flv:keyint=50:vbitrate=300:mbd=2:mv0:trell:v4mv:cbp:last_pred=3 -vf scale=480:360 -of lavf -oac mp3lame -lameopts abr:br=64 -srate 22050'
OUTPUT_FORMAT='flv'
USER_FOLDER="/usr/local/jboss/server/default/resources/files/user_folders"
THUMBNAIL_WIDTH=175
THUMBNAIL_HEIGHT=110
# получаем параметры
while getopts «:s:t:hp:u:H:W:» optname
do
case $optname in
«u»)
USER_FOLDER="$OPTARG"
;;
«p»)
PARAMS="$OPTARG"
;;
«s»)
SRC_DIR="$OPTARG"
;;
«W»)
THUMBNAIL_WIDTH="$OPTARG"
;;
«H»)
THUMBNAIL_HEIGHT="$OPTARG"
;;
«t»)
TRG_DIR="$OPTARG"
;;
«h»)
echo «-h — help»
echo «-W — width of thumbnail»
echo «-H — height of thumbnail»
echo «-p — command line params for mencoder»
echo «-u — path to user folders»
echo «-s — source dir»
echo «-t — target dir»
exit 0;
;;
*)
echo «Unknown parameter or option error with option — $OPTARG»
exit 1;
;;
esac
done

while :
do
echo «Looking dir ${SRC_DIR}...\n»
#получаем входящие файлы видео
FILES=$(find $SRC_DIR -type f -exec basename '{}' \;)
#проходим по ним
for FILE in $FILES
do
#парсим имя файла, получая имя папки и конечного файла
USER_ID=$(echo $FILE | sed 's/[^0-9]/ /g' | awk '{print $1}')
VIDEO_ID=$(echo $FILE | sed 's/[^0-9]/ /g' | awk '{print $2}')
#запускаем в фоне команды
(echo «Converting $FILE...»
#забрали файл в промежуточную папку
mv ${SRC_DIR}/${FILE} ${TRG_DIR}/${FILE}
#вырезали превью
mplayer -ss 16 -frames 1 -vo png -nosound ${TRG_DIR}/${FILE}
THUMBNAIL="${USER_FOLDER}/${USER_ID}/video/${VIDEO_ID}.png"
#переместили превью
mv 00000001.png $THUMBNAIL
#уменьшили до нужного размера
convert $THUMBNAIL -resize ${THUMBNAIL_WIDTH} -gravity center -crop ${THUMBNAIL_WIDTH}x${THUMBNAIL_HEIGHT}+0+0 -quality 75 $THUMBNAIL
#кодируем видео
mencoder ${TRG_DIR}/${FILE} -o «${TRG_DIR}/${FILE}.${OUTPUT_FORMAT}» ${PARAMS}
#записали метаинформацию для плеера
flvtool2 -UP «${TRG_DIR}/${FILE}.${OUTPUT_FORMAT}»
#удаляем исходный файл
rm ${TRG_DIR}/${FILE}
#и копируем сконвертированный файл в папку пользователя
mv «${TRG_DIR}/${FILE}.${OUTPUT_FORMAT}» «${USER_FOLDER}/${USER_ID}/video/${VIDEO_ID}.${OUTPUT_FORMAT}»
) &
done
sleep 10s
done

Ставим на сервер

cd /usr/local/src/

DOWNLOAD MODULES

wget www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
wget rubyforge.org/frs/download.php/9225/flvtool2_1.0.5_rc6.tgz
wget easynews.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz
wget superb-west.dl.sourceforge.net/sourceforge/ffmpeg-php/ffmpeg-php-0.5.1.tbz2
wget downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
wget downloads.xiph.org/releases/vorbis/libvorbis-1.1.2.tar.gz

EXTRACT MODULES

tar zxvf lame-3.97.tar.gz
tar zxvf libogg-1.1.3.tar.gz
tar zxvf libvorbis-1.1.2.tar.gz
tar zxvf flvtool2_1.0.5_rc6.tgz
tar jxvf essential-20061022.tar.bz2
tar jxvf ffmpeg-php-0.5.1.tbz2

mkdir /usr/local/lib/codecs/

yum install gcc gmake make libcpp libgcc libstdc++ gcc4 gcc4-c++ gcc4-gfortran subversion ruby ncurses-devel -y

DOWNLOAD FFMPEG and MPLAYER

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
cd /usr/local/src/mplayer

svn update

cd /usr/local/src/
mv /usr/local/src/essential-20061022/* /usr/local/lib/codecs/
chmod -R 755 /usr/local/lib/codecs/

LAME:

cd /usr/local/src/lame-3.97
./configure
make && make install

LIBOGG

cd /usr/local/src/
cd /usr/local/src/libogg-1.1.3
./configure --enable-shared && make && make install
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

LIBVORBIS

cd /usr/local/src/
cd /usr/local/src/libvorbis-1.1.2
./configure && make && make install

FLVTOOL2

cd /usr/local/src/
cd /usr/local/src/flvtool2_1.0.5_rc6/
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install

MPLAYER

cd /usr/local/src/
cd /usr/local/src/mplayer
./configure && make && make install

cd /usr/local/src/

FFMPEG:

cd /usr/local/src/ffmpeg/
./configure --enable-libmp3lame --enable-libvorbis --disable-mmx --enable-shared
make
make install

export LD_LIBRARY_PATH=/usr/local/lib/

ln -s /usr/local/lib/libavformat.so.50 /usr/lib/libavformat.so.50
ln -s /usr/local/lib/libavcodec.so.51 /usr/lib/libavcodec.so.51
ln -s /usr/local/lib/libavutil.so.49 /usr/lib/libavutil.so.49
ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0
ln -s /usr/local/lib/libavformat.so.51 /usr/lib/libavformat.so.51

FFMPEG-PHP:

cd /usr/local/src/
cd /usr/local/src/ffmpeg-php-0.5.1/
phpize
./configure
make
make install

NOTICE: Make sure this is the correct php.ini for the box!!

echo 'extension=ffmpeg.so' >> /usr/local/Zend/etc/php.ini

NOTICE: Make sure this is the correct php.ini for the box!!

RESTART APACHE

service httpd restart

Еще статья по теме:

Оригинал: http://boombick.org/blog/posts/19

Mencoder — это утилита, идущая вмесет с mplayer. Если с помощью
mplayer вы можете воспроизводить аудио и видео файлы, то mencoder
предназначен для их обработки и конвертирования из одного формата в
другой. Для mencoder имеется масса графических облочек, но в этой
заметке я расскажу вам о работе с ним из командной строки, и вы
увидите, что она ничем не уступает GUI-оболочкам.

Mencoder поддерживает множество типов файлов, вот некоторые из них:
MPEG/VOB, AVI, ASF/WMA/WMV, RM, QT/MOV/MP4, Ogg/OGM, MKV, VIVO, FLI,
FLV. Синтаксис команд довольно прост, несмотря на большое количество
опций. Несмотря на свой «скромный» интерфейс, mencoder может делать с
мультимедиа-файлами удивительные вещи.

Простая команда для конвертирования MPG-файла в AVI-формат:

mencoder file.mpg -o file.avi -ovc lavc -oac lavc

Опции -oac и -ovc указывает на желаемые аудио и видео кодеки. Вы
можете посмотреть список доступных кодеков при помощи команды mencoder
— ovc help и mencoder -oac help

Предположим, что вам нужен несжатый аудиопоток и вы решили
испольщовать PCM. Вы можете указать желаемый формат аудио при помощи
опции acodec:

mencoder file.mpg -o file.avi -ovc lavc -oac lavc -lavcopts acodec=pcm

Если вы используете mp3-сжатие, можно также указать битрейт:

mencoder file.mpg -o file.avi -ovc lavc -oac lavc -lavcopts acodec=libmp3lame:abitrate=128

Вы можете использовать lameopts, если в вашей системе установлен
libmp3lame и вам хочется расширить список опций, доступных при
кодировании аудио. Еще с помощь lameopts можно создавать файлы с
переменным битрейтом:

mencoder file -o file.avi -ovc lavc -oac mp3lame -lameopts vbr=2:q=3

гду q — это любое число в диапазоне от 0 до 9
Также можно работать и с аудиодорожкой из видеофайлов:

mencoder file.mpg -o file.avi -ovc lavc -oac lavc -lavcopts \
acodec=libmp3lame:abitrate=128 vcodec=xvid

Если вы не хотите использовать видеокомпрессию, используйте
vcodec=copy. С этой опцией видеопоток будет просто скопирован байт в
байт из исходного файла.

Вы можете использовать DivX и xvid напрямую, без опции lavc:

mencoder -ovc xvid -oac mp3lame -o destination.avi source.avi

Для указания более подробных параметров вы можете использовать опции
xvid

mencoder -ovc xvid -oac mp3lame -xvidencopts bitrate=878 -o \
destination.avi source.avi

Повышение битрейта увеличивает качество изображения, но вместе с
качеством растет и размер файла. Помните об этом.

Следубщим шагом, а точнее двумя, будет описания процесса
перекдирования DVD в XviD. Сначала mencoder анализирует файл, затем,
на основе полученных данных, перекодирует DVD-поток. Использование
двух фаз ненамного дольше, но на выходе вы получите более качественный
файл. Будьте готовы к тому, что во время процесса кодирования нагрузка
на CPU будет порядка 90%:

mencoder dvd:// -oac mp3lame -ovc xvid -xvidencopts pass=1 -o /dev/null
mencoder dvd:// -oac mp3lame -ovc xvid -xvidencopts pass=2:bitrate=800 -o xvidfile.avi

Вы можете указать битрейт для получения необходимого качества.
Например, чтобы вместить DVD в 700-мегабатный xvid-файл, используйте
следующие опции:

mencoder dvd:// -ovc xvid -oac mp3lame -xvidencopts bitrate=-700000 -o file.avi

Если вы не хотите максимальной загрузки процессора на время
кодирования, используйте утилиту nice, которая понизит приоритет
выполняющегося процесса:

nice -n 19 mencoder dvd:// -ovc xvid -oac mp3lame -xvidencopts bitrate=-700000 -o file.avi

Если у вас есть множество маленьких виедофалйов и вы хотите сделать из
них один большой, то mencoder может помочь вам… Переиенуйте исходные
файлы так, чтобы они отсортировывались в необходимом вам порядке.
Затем используйте:

mencoder * -o output.avi

Если вы хотите добавит аудиодорожку к видеофайлу, то используйте:

mencoder source.avi -o destination.avi -ovc copy -oac mp3lame \
— audiofile file.wav (для несжатых файлов)
mencoder source.avi -o destination.avi -ovc copy -oac copy \
— audiofile file.mp3 (для сжатых файлов)

Для получения видео, пригодного к воспроизведению на [4]iPodLinux
используйте:

mencoder -ovc raw -ofps 15 -oac pcm -vf \
scale=176:-2,expand=176:132,format=bgr16 input.file -o output.avi

Эта команда создаст RAW AVI-файл с несжатым аудиопотоком и
масштабирует его к размеру экрана Nano.

У меня есть PocketPC, который частенько сопровождает меня в деловых
поездках. Я использую mencoder для получения фильмов, которые
уместятся на 512Mb SD-Card и будут воспроизводиться на моем Pocket:

mencoder -oac mp3lame -lameopts mode=3:preset=24 -ovc lavc \
— lavcopts vcodec=mpeg4:vhq:vbitrate=384:keyint=250 -vop \
expand=»320:240» -o outputfile.avi inputfile.avi

или

mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=200:abitrate=48 \
— vop scale=320:240 -oac copy -o output.avi

Разница в том, что вторая команда масштабирует фильм до размера экрана
PocketPC — 320 *240 пикселей.

Если у вас есть web-камера и выхотите записать изображение с нее,
используйте:

mencoder tv:// -tv driver=v4l:device=/dev/video0:width=640:height=480:forceaudio -ovc \
lavc -oac lavc -lavcopts vcodec=mpeg4:acodec=mp3 -ffourcc divx -o test.avi

Команда записывает весь вывод /dev/video0 в файл с разрешением 640×480
и mp3-звуком.

Как вы видите, с помощью mencoder можно работать с большим количеством
форматом, доступно огромное число опций, он мальенький, легкий и очень
бытсро работает. И я не променяю его ни на одну утилиту с более
«дружественным» интерфейсом.

Специально для интересующихся, список фронт-ендов к mencoder:

Kmencoder http://sf.net/projects/kmencoder/
Konverter http://www.libsdl.de/projects/konverter/
Kmenc 15 http://kmenc15.sf.net/
GMencoder http://gmencoder.sf.net/
AcidRIP http://untrepid.com/acidrip/
MenGUI http://jahjah.free.fr/morphos/