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)>>
|