Data: [5-05-2024]
Avtor: Svilen Savov (svilendotorg)
Podurzha se ot: Svilen Savov (svilendotorg)

Izklyuchitelno se radvam, che moga da doprinesa s neshto za razvitieto na tozi sait i bulgarskoto open-source obshtestvo, makar i tolkova malko i neznachitelno :)

SHTe spodelia s vas purviiat si po-seriozen bash skript.

Ideiata za suzdavaneto mu mi doide, tui-kato polzvam dzhoben kompyutur - PocketPC HTC Trinity s maluk ekran i slab protsesor (320h240, 400MHz Samsung), na koito e nevuzmozhno da se gledat video failove sus standartna rezolyutsiia i visok bitreit. Za tselta beshe neobhodimo da prekompresiram vseki video fail polzvaiki laptopa si pod Windows. Tova e trudoemuk protses, polzvasht mnogo resursi i vreme, dori i chrez polzvaneto na batch spisutsi. Sushto taka, moga da kompresiram klipovete, praveni ot fotoaparata mi Canon - stavat ogromni pri snimane na video s visok freimreit. Prez tova vreme resursite na lichniiat mi Debian survur si stoiaha na 80% svobodni i taka reshih da gi vpregna v kompresirane na video failove.

Skripta izpolzva mencoder, koito e chast ot paketa na mplayer, kakto i debian paketa msttcorefonts zaradi shriftovete mu za subtitri. Mozhe da konvertirate tsiala papka s razlichni vidove video failove, ukazani v $EXT. Skripta vgrazhda subtitri avtomatichno, stiga da nosiat sushtoto ime kato video faila. Niamam mnogo vreme za obiasneniia v momenta, prosto pusnete skripta bez parametri i shte si printne lek help, dostatuchen za polzvane :)
Otkrit sum za idei kak da go razshiria s polezni neshta, ili da optimiziram koda po niakakuv nachin :)


[code]

#!/bin/bash

# Description: Compress a single video file or all video files in a folder using mencoder
# Author: Svilen Savov (svilen@svilen.org)
# Date: 25.10.2007, revision 1.0

# FILETYPES TO CONVERT
EXT="avi AVI mpeg MPEG mpg MPG asf ASF flv FLV wmv WMV mov MOV qt QT vob VOB"

check_and_encode () {
   if [ -n "`echo $EXT| grep ${1##*.}`" ]; then
       if [ "$OPTIONS" = "false" ]; then
               input_options
       fi
       echo "
       #########################################################################
       $1 --->
       "`echo $1 | sed 's;\(.*\)\..*;\1;'`.ENCODED.$FILEADD.avi"

                       Video bitrate: $VIDEO_BITRATE kbps
                       Horizontal resolution: $H_SCALE
                       Audio bitrate: $AUDIO_BITRATE kbps
                       Audio mode: $AUDIO_MODE
                        0  -  stereo
                        1  -  joint-stereo
                        2  -  dualchannel
                        3  -  mono
       #########################################################################
       "
       nice -n +5 mencoder \
           -vf scale=$H_SCALE:-2 -sws 9 \
           -oac mp3lame -lameopts mode=$AUDIO_MODE:cbr:br=$AUDIO_BITRATE -srate 44100 \
           -ovc xvid -xvidencopts vhq=4:max_bframes=0:bitrate=$VIDEO_BITRATE \
           -autosub -subfont-text-scale 4.0 -subwidth 90 -subcp cp1251 \
           -font /usr/share/fonts/truetype/msttcorefonts/arial.ttf \
       "$1" -o "`echo $1 | sed 's;\(.*\)\..*;\1;'`.ENCODED.$FILEADD.avi"
       if [ -n "$DIRECTORY" ]; then
               mkdir -p "$DIRECTORY" && mv "$1" "$DIRECTORY"
               if [ -f "`echo $1 | sed 's;\(.*\)\..*;\1;'`.ENCODED.$FILEADD.avi" ]; then
                       mv "`echo $1 | sed 's;\(.*\)\..*;\1;'`.ENCODED.$FILEADD.avi" "$DIRECTORY"
               fi
       fi
       beep
   fi
}

input_options () {
echo "Enter video bitrate in Kbps (Examples: 192, 224, 256...)"
read VIDEO_BITRATE
echo "Enter video horizontal resolution in pixells (Examples: 320, 640, 800...)"
read H_SCALE
echo "Enter audio bitrate in Kbps (Examples: 64, 86, 92, 128...)"
read AUDIO_BITRATE
echo "Enter audio mode"
echo "AUDIO MODE"
echo "0  -  stereo"
echo "1  -  joint-stereo"
echo "2  -  dualchannel"
echo "3  -  mono"
read AUDIO_MODE
OPTIONS=ready
}
if [ "$1" = "-pc" ] || [ "$2" = "-pc" ] || [ "$3" = "-pc" ]; then
   VIDEO_BITRATE=900
   H_SCALE=640
   AUDIO_BITRATE=128
   AUDIO_MODE=0
   FILEADD=PC.XviD
elif [ "$1" = "-pc_mono" ] || [ "$2" = "-pc_mono" ] || [ "$3" = "-pc_mono" ]; then
   VIDEO_BITRATE=900
   H_SCALE=640
   AUDIO_BITRATE=96
   AUDIO_MODE=3
   FILEADD=PC.XviD.MONO
elif [ "$1" = "-ppc_high" ] || [ "$2" = "-ppc" ] || [ "$3" = "-ppc" ]; then
   VIDEO_BITRATE=256
   H_SCALE=320
   AUDIO_BITRATE=96
   AUDIO_MODE=1
   FILEADD=PPC.XviD.HQ
else
       OPTIONS=false
fi
if [ "$1" = "-m" ] || [ "$2" = "-m" ] || [ "$3" = "-m" ]; then
       DIRECTORY=encoded
fi
if [ "$1" = "-a" ] || [ "$2" = "-a" ] || [ "$3" = "-a" ]; then
       for FILE in *; do
       check_and_encode $FILE
       done
       beep -f 1000 -r 2 -n -r 5 -l 10 --new
       exit 0
elif [ -f "$1" ] || [ -f "$2" ] || [ -f "$3" ]; then
       check_and_encode $1
       exit 0
else
       echo "
Usage: '$0 <filename>' or '$0 -a' to compress all files in the current folder
Additional encoding parameters:
       -pc (Video bitrate: 900 kbps, Horizontal scale: 640, Audio bitrate: 128 kbps, Audio mode: stereo)
       -pc_mono (Video bitrate: 900 kbps, Horizontal scale: 640, Audio bitrate: 96 kbps, Audio mode: mono)
       -ppc (Video bitrate: 256 kbps, Horizontal scale: 320, Audio bitrate: 96 kbps, Audio mode: joint-stereo)

Examples:
1.      '$0 -a -ppc' to compress all files in the current directory using settings for -ppc
2.      '$0 Movie.avi -pc' to compress the file Movie.avi using settings for -pc
3.      '$0 Movie.avi' to compress the file Movie.avi using custom defined settings
       "
       exit 0
fi
beep -f 1000 -r 2 -n -r 5 -l 10 --new
[/code]

Promeni: Versiia 1.0: startova versiia

svaliane: http://svilen.org/
ofitsialna stranitsa: http://svilen.org/

Litsenz: GPL

<<iconf( ver. 0.1) | cpufreq( ver. 1)>>