
|
 |
|
 |
Конвертиране на видео файлове с mencoder 1.0 [нестабилна] |
 |
  |
|
 |
 |
Датa: [30-04-2025]
Автор: Svilen Savov (svilendotorg)
Подържа се от: Svilen Savov (svilendotorg)
Изключително се радвам, че мога да допринеса с нещо за развитието на този сайт и българското open-source общество, макар и толкова малко и незначително :)
Ще споделя с вас първият си по-сериозен bash скрипт.
Идеята за създаването му ми дойде, тъй-като ползвам джобен компютър - PocketPC HTC Trinity с малък екран и слаб процесор (320х240, 400MHz Samsung), на който е невъзможно да се гледат видео файлове със стандартна резолюция и висок битрейт. За целта беше необходимо да прекомпресирам всеки видео файл ползвайки лаптопа си под Windows. Това е трудоемък процес, ползващ много ресурси и време, дори и чрез ползването на batch списъци. Също така, мога да компресирам клиповете, правени от фотоапарата ми Canon - стават огромни при снимане на видео с висок фреймрейт. През това време ресурсите на личният ми Debian сървър си стояха на 80% свободни и така реших да ги впрегна в компресиране на видео файлове.
Скрипта използва mencoder, който е част от пакета на mplayer, както и debian пакета msttcorefonts заради шрифтовете му за субтитри. Може да конвертирате цяла папка с различни видове видео файлове, указани в $EXT. Скрипта вгражда субтитри автоматично, стига да носят същото име като видео файла. Нямам много време за обяснения в момента, просто пуснете скрипта без параметри и ще си принтне лек хелп, достатъчен за ползване :)
Открит съм за идеи как да го разширя с полезни неща, или да оптимизирам кода по някакъв начин :)
[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]
Промени: Версия 1.0: стартова версия
сваляне: http://svilen.org/
официална страница: http://svilen.org/
Лиценз: GPL
<<iconf( вер. 0.1) | cpufreq( вер. 1)>>
|
 |
 |
 |
 |
А защо не .. От: Александър Христов <root__at__securitydot __точка__ net> На: 26-10-2007@8:50 GMT+2 Оценка: 1/НеутраленА защо не ffmpeg ?
[Отговори на този коментар]
Към: А защо не .. От: TheArch <M__dot__Stoikov< at >gmail__dot__com> На: 26-10-2007@12:20 GMT+2 Оценка: 1/Неутрален явно си фен на ffmpeg е па аз пък съм на Fedora и няма да попитам "а защо не Fedora?" м/у другото и аз предпочитам mencoder
а иначе скрипта на мен лично ми изглежда добре въпреки че трябва да има по качествен начин за да се каже какви параметри да ползва
Но предвид това за което го ползваш е напълно нормално да има малко опции :)
Браво :D *thumb_up*
[Отговори на този коментар]
iPod От: Martin Tapankov На: 26-10-2007@20:16 GMT+2 Оценка: 1/Неутраленидеята е много добра, и се радвам че някой се е заел да поработи върху това.
може би няма да е лошо да се приспособи същата щуротия за конвертиране на видео за iPod. знам че у нас не са много популярни (все още), но и това ще стане.
айде и със здраве :)
[Отговори на този коментар] опции на mencoder От: tweeg На: 1-11-2007@7:41 GMT+2 Оценка: 1/Неутрален1) не знам защо си избрал точно lame и xvid. Според мен lavc ще е по добре, най-малкото няма да ти трябва mencoder с lame и xvid. Е, ще трябва накрая да му удариш едно -ffourcc XVID да не се шашкат плеърите.
2) Добре е първо да направиш едно "expand=:::::4/3" до 4:3 или колкото ти е там дисплаея, че субтитрите да паднат в черното
3) този -srate 44100 не ми е ясно защо го правиш? То ако не е на 44100 според мен ще ти трябва и едно -af resample или lavcresample
[Отговори на този коментар] Нова версия! Пренаписан код, опция за iPod От: Svilen <svilen< at >svilen[ точка ]org> На: 11-11-2007@0:13 GMT+2 Оценка: 1/Неутрален#!/bin/bash
# Description: Compress a single video file or all video files in a folder using mencoder
# Author: Svilen Savov (svilen@svilen.org)
# Date: 11.11.2007, revision 1.1
# FILETYPES TO CONVERT
EXT="avi AVI mpeg MPEG mpg MPG asf ASF flv FLV wmv WMV mov MOV qt QT vob VOB"
# DISPLAY THE HELP
usage () {
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)
-ppc (Video bitrate: 256 kbps, Horizontal scale: 320, Audio bitrate: 96 kbps, Audio mode: joint-stereo)
-mono (Audio mode: mono)
-ipod (Suggest!)
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
}
# THE ENCODING SCRIPT
check_and_encode () {
if [ -n "`echo $EXT| grep ${1##*.}`" ]; then
if [ -z "$SETTINGS" ]; then
input_options
fi
mencoder \
-vf scale=$H_SCALE:-2,cropdetect -sws 9 \
-oac mp3lame -lameopts mode=$AUDIO_MODE:cbr:br=$AUDIO_BITRATE \
-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 "$MOVEDIR" ]; then
mkdir -p "$MOVEDIR" && mv "`echo $1 | sed 's;\(.*\)\..*;\1;'`".* "$MOVEDIR"
fi
beep
fi
}
# CUSTOM ENCODING OPTIONS
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
echo "Enter directory name to move the compressed files to, or leave blank to leave them in the current folder"
read MOVEDIR
SETTINGS=ready
FILEADD=CUSTOM
}
# SCRIPT ARGUMENTS
while : ; do
case $# in 0) break ;; esac
case "$1" in
-pc )
SETTINGS=-PC
VIDEO_BITRATE=900
H_SCALE=640
AUDIO_BITRATE=128
AUDIO_MODE=0
FILEADD=PC.XviD
shift
;;
-ppc )
SETTINGS=-PPC
VIDEO_BITRATE=256
H_SCALE=320
AUDIO_BITRATE=96
AUDIO_MODE=1
FILEADD=PPC.XviD.HQ
shift
;;
-ipod )
SETTINGS=-iPod
VIDEO_BITRATE=
H_SCALE=
AUDIO_BITRATE=
AUDIO_MODE=
FILEADD=iPod.XviD.HQ
shift
;;
-mono )
AUDIO_MODE=3
shift
;;
-m | --move) MOVEDIR=ENCODED ; shift ;;
-l | --loop) LOOP=ENABLED ; shift ;;
-a | --all) ALLFILES=ENABLED ; shift ;;
-h | --help) usage ; shift ;;
* ) if [ -f "$1" ]; then
SINGLE_FILE="$1"
shift
else break
fi
;;
esac
done
if [ "$ALLFILES" = "ENABLED" ]; then
for FILE in *; do
check_and_encode "$FILE"
done
beep -f 1000 -r 2 -n -r 5 -l 10 --new
exit
fi
if [ -f "$SINGLE_FILE" ]; then
check_and_encode "$SINGLE_FILE"
beep -f 1000 -r 2 -n -r 5 -l 10 --new
exit
fi
if [ "$LOOP" = "ENABLED" ]; then
echo loop
fi
usage
exit
[Отговори на този коментар] може ли към ДВД? От: topche На: 22-11-2007@19:34 GMT+2 Оценка: 1/Неутраленще се радвам ако включиш опция от divx към ДВД, че една машинка ми седи без работа, а ДВД плеъра под телевизора, няма опция за вдигане размера на субтитрите при свирене на divx и ми е прекалено дребно. Стана много объркано изречение ... Абе като заключение искам да мога да правя от divx към ДВД. Благодаря
[Отговори на този коментар]
Към: може ли към ДВД? От: Pi4a На: 25-02-2008@10:20 GMT+2 Оценка: 1/НеутраленИ това ли е слаб процесор - 400 МHz?! Аз на Nokia 6600 (Symbian 7.0s, 104 MHz) гледам филми без проблем, както и на 200 MHz PocketPC с Windows Mobile 2003. А и според мен е нормално да конвертираш филмите, най-малкото заради големината, за какво ти е " стандартна резолюция и висок битрейт"?
[Отговори на този коментар] Към: може ли към ДВД? От: Цецо На: 10-01-2013@20:15 GMT+2 Оценка: 1/НеутраленМного добра идея, обаче ето какво се случва при мен:
./dekodirane Videos/IMGP4349.AVI
Enter video bitrate in Kbps (Examples: 192, 224, 256...)
256
Enter video horizontal resolution in pixells (Examples: 320, 640, 800...)
320
Enter audio bitrate in Kbps (Examples: 64, 86, 92, 128...)
128
Enter audio mode
AUDIO MODE
0 - stereo
1 - joint-stereo
2 - dualchannel
3 - mono
0
#########################################################################
Videos/IMGP4349.AVI --->
Videos/IMGP4349.ENCODED..avi
Video bitrate: 256 kbps
Horizontal resolution: 320
Audio bitrate: 128 kbps
Audio mode: 0
0 - stereo
1 - joint-stereo
2 - dualchannel
3 - mono
#########################################################################
MEncoder 1.0rc3-4.4.4 (C) 2000-2009 MPlayer Team
MPlayer was compiled without libmp3lame support.
-lameopts is not an MEncoder option
Exiting... (error parsing command line)
./dekodirane: line 43: beep: command not found
[Отговори на този коментар]
|
 |
|
|
|
|
|
|