Видео монтажа у Linux конзоли
Ово је архива MPlayer/MEncoder и FFmpeg поступака из описаног периода. Неки пакети, кодеци, адресе за преузимање и опције изградње су застарели. Примери документују првобитни радни процес; пре прилагођавања проверите документацију инсталираног алата. Сечење без поновног кодирања обично је ограничено кључним кадровима, а спајање токова захтева компатибилне кодеке и параметре контејнера.
Linux је одлична платформа за рад са видеом. На њему раде читави центри за обраду звука и видеа, као и многи професионални студији. Познат пример је постпродукција цртаног филма „Мадагаскар“. Списак филмова направљених уз Linux је дугачак, али овде желим да пишем о обради кућног видеа.
За то постоји добар избор програма. Ако не познајете Linux, мораћете нешто да научите. Вреди труда, а не мора ништа да кошта: велики део програма је бесплатан.
Један од познатих Linux алата за обраду видеа, MEncoder, ради у терминалу. То је предност када желите да аутоматизујете обраду скриптама. Видео-сервери могу га користити за аутоматско претварање датотека. Ако сте тек прешли на Linux и командна линија вас плаши, постоје и графичка сучеља: само се не испоручују подразумевано уз MEncoder. Нека су наведена касније, али прво треба разумети команде.
MEncoder припада пројекту MPlayer, чији алати покривају репродукцију, хватање, снимање, емитовање и претварање видеа. Према енциклопедијском опису, MEncoder претвара аудио и видео формате, подржава многе кодеке и контејнере и користи libavcodec.
MPlayer се обично представља као медијски плејер, док претварање и друге функције пружају повезани програми. Паковање може бити збуњујуће, али алати припадају истом пројекту. Овај чланак представља неколико њих. Сајт пројекта је mplayerhq.hu.
Прво инсталирајте потребне програме. Проверите да ли ваша дистрибуција већ има MPlayer и MEncoder. На системима заснованим на Debian-у команда је:
apt-get install mencoder mplayer
Ови примери потичу из времена MEncoder-а, FLV видеа и PocketPC уређаја. Називи пакета, сервери за преузимање и опције за изградњу испод односе се на те верзије.
Уобичајене команде
Претворити MPG у AVI
mencoder slobodnasrbija1912.mpg -o slobodna.avi -ovc lavc -oac lavc
Поделити AVI на делове
avisplit -s 37 -i bagow-001.avi
Претворити AVI у FLV
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
На Habr-у сам пронашао користан чланак и сачувао следећи пример демона. Он надгледа директоријум за отпремање, премешта нове видео-датотеке у привремени директоријум, покреће претварање у позадини, прави сличицу и смешта готове датотеке у корисников директоријум.
Скрипта је написана у Bash-у, па за непрекидан рад користите nohup или screen. Почетно решење не ограничава број истовремених претварања: много отпремљених датотека може преоптеретити сервер. За ауторово оптерећење то није било критично. Ако вама јесте, једна могућност је ред послова помоћу flock.
Главни параметри задају се у командној линији; -h приказује списак. Нарочито је важан -u, који задаје корени директоријум корисничких фасцикли. Структура је фиксна у скрипти: претворени видео иде у USER_FOLDER/USER_ID/video. За другачију структуру треба изменити код.
Параметри -s и -t задају изворни и привремени директоријум. Датотеке у изворном директоријуму, подразумевано /var/videoinput, морају имати назив USER_ID_VIDEO_ID.ext. Први број је идентификатор корисникове фасцикле; други означава видео, на пример његов запис у бази података.
Сличица се смешта поред видеа, са истим основним називом и наставком .png. Кадар се узима из шеснаесте секунде. Требало би проверити трајање, јер снимак може бити краћи; то остаје вежба за читаоца. Пример задржава изворну датотеку ако претварање не успе и користи засебан радни директоријум за сваку сличицу.
Потребни програми су:
mencoderза претварање;mplayerза издвајање кадра;- ImageMagick-ов
convertза промену величине сличице; flvtool2за упис FLV метаподатака.
#!/bin/bash
# folder_monitor.sh
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 ;;
t) TRG_DIR=$OPTARG ;;
W) THUMBNAIL_WIDTH=$OPTARG ;;
H) THUMBNAIL_HEIGHT=$OPTARG ;;
h)
printf '%s\n' '-h: help' '-W: thumbnail width' \
'-H: thumbnail height' '-p: mencoder options' \
'-u: user folders' '-s: source directory' \
'-t: intermediate directory'
exit 0 ;;
*) printf 'Invalid option: %s\n' "$OPTARG" >&2; exit 1 ;;
esac
done
mkdir -p "$SRC_DIR" "$TRG_DIR" "$USER_FOLDER" || exit 1
SRC_DIR=$(cd "$SRC_DIR" && pwd) || exit 1
TRG_DIR=$(cd "$TRG_DIR" && pwd) || exit 1
USER_FOLDER=$(cd "$USER_FOLDER" && pwd) || exit 1
read -r -a ENCODER_OPTIONS <<< "$PARAMS"
while :; do
printf 'Looking in %s...\n' "$SRC_DIR"
while IFS= read -r -d '' INPUT; do
FILE=${INPUT##*/}
[[ $FILE =~ ^([0-9]+)_([0-9]+)\.[A-Za-z0-9]+$ ]] || continue
USER_ID=${BASH_REMATCH[1]}
VIDEO_ID=${BASH_REMATCH[2]}
JOB_DIR=$(mktemp -d "$TRG_DIR/job.XXXXXX") || continue
if ! mv -- "$INPUT" "$JOB_DIR/$FILE"; then
rmdir "$JOB_DIR"
continue
fi
(
cd "$JOB_DIR" || exit 1
printf 'Converting %s...\n' "$FILE"
DEST="$USER_FOLDER/$USER_ID/video"
mkdir -p "$DEST" || exit 1
if ! mencoder "$FILE" -o "$FILE.$OUTPUT_FORMAT" "${ENCODER_OPTIONS[@]}"; then
printf 'Conversion failed; source retained in %s\n' "$JOB_DIR" >&2
exit 1
fi
flvtool2 -UP "$FILE.$OUTPUT_FORMAT" || exit 1
if mplayer -ss 16 -frames 1 -vo png -nosound "$FILE" && [ -f 00000001.png ]; then
convert 00000001.png -resize "$THUMBNAIL_WIDTH" \
-gravity center -crop "${THUMBNAIL_WIDTH}x${THUMBNAIL_HEIGHT}+0+0" \
-quality 75 "$DEST/$VIDEO_ID.png"
fi
mv -- "$FILE.$OUTPUT_FORMAT" "$DEST/$VIDEO_ID.$OUTPUT_FORMAT" || exit 1
rm -- "$FILE"
rm -f -- 00000001.png
cd "$TRG_DIR" || exit 1
rmdir "$JOB_DIR"
) &
done < <(find "$SRC_DIR" -maxdepth 1 -type f -print0)
sleep 10
done
Инсталирање на сервер
Испод је сачуван поступак изградње са изворним верзијама за сервер заснован на RPM-у: LAME, Ogg/Vorbis, MPlayer, FFmpeg, FLVTool2 и PHP проширење. Старе адресе за преузимање наведене су у историјском контексту.
cd /usr/local/src/
# DOWNLOAD MODULES
wget www3.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
wget -O flvtool2_1.0.5_rc6.tgz http://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
Још један чланак о MEncoder-у
Извор: boombick.org/blog/posts/19.
MEncoder је алат за претварање који се испоручује уз MPlayer. MPlayer репродукује звук и видео, а MEncoder их обрађује и претвара између формата. Постоји много графичких сучеља, али следећи примери показују могућности командне линије.
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 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=mpeg4
Ако не желите да користите видео компресију, користите -ovc 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 у xvid фајл од 700 мегабајта, користите следеће опције:
mencoder dvd:// -ovc xvid -oac mp3lame -xvidencopts bitrate=-700000 -o file.avi
Користите nice да снизите приоритет кодирања и уступите процесор другим задацима. Команда не ограничава проценат оптерећења CPU-а:
nice -n 19 mencoder dvd:// -ovc xvid -oac mp3lame -xvidencopts bitrate=-700000 -o file.avi
Ако имате мноштво малих видео фајлова и желите да од њих направите један велики, mencoder вам може помоћи... Преименујте изворне фајлове тако да се сортирају у редоследу који вам је потребан. Затим користите:
mencoder *.avi -ovc copy -oac copy -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
За добијање видеа погодног за репродукцију на 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 за добијање филмова који ће стати на 512 MB SD картицу и репродуковати се на мом Pocket-у:
mencoder -oac mp3lame -lameopts mode=3:preset=24 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=384:keyint=250 -vf expand="320:240" -o outputfile.avi inputfile.avi
или
mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=200:abitrate=48 -vf scale=320:240 -oac copy -o output.avi
Разлика је у томе што друга команда скалира филм на величину екрана PocketPC - 320x240 пиксела.
Ако имате веб камеру и желите да снимите слику са ње, користите:
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/