[Comm] Конвертирование видео
Dmytro O. Redchuk
brownian.box на gmail.com
Пт Май 22 10:35:29 MSD 2009
2009/5/21 Il'ya <brutalfreak на gmail.com>:
> Подскажите пожалуйста как наиболее быстро и просто конвертировать из
> одного формата в другой (не консольными способами).
Если не консоль, то достаточно просто и удобно один раз все сделать
в Avidemux, сохранить как "сценарий",
сделать из него шаблон и шелловским скриптом заполнять шаблон
"параметрами" ($src, $dst, $target_size, например..).
То есть, потом таки перейти в консоль :-)
Можно создать несколько шаблонов (с отсечением полос либо без, и т.п.).
Вот кусок моего "шаблона"
(НЕ УВЕРЕН, ЧТО РАБОТАЕТ, я "перешел" на mencoder),
он берет два аргумента -- имя файла и "во сколько раз уменьшить размер"
(понятно, что можно иначе "строить политику"), и создает сценарий для Avidemux.
Делалось для перегона сграбленого HDV в "подходящий для записи на DVD".
Да, он еще попутно сохраняет звук в отдельном mp3.
#------------------------------------------------------------------
#!/bin/bash
#
#
SRC=${1:?"Please specify input file."}
squeeze_factor=${2:-5}
SRC=$(pwd)/${SRC}
DST=${SRC}.mpg
AUDIO=${SRC}.mp3
SCRIPT=${SRC}.js
if [ ! -f $SRC ] ; then
echo -e "\nERROR: File \"$SRC\" does not exist or is a special file.\n"
exit 1
fi
size=`ls -s $SRC | awk '{ print $1 }'`
squeeze_size=$((size/1024/$squeeze_factor))
echo -e "\nVideo size: $[size/1024]M, squeeze factor: $squeeze_factor,
squeezed size: ${squeeze_size}M.\n"
cat << SCRIPT > $SCRIPT
//AD <- Needed to identify//
var sourcefile = "$SRC";
var targetfile = "$DST";
var audiofile = "$AUDIO";
var app = new Avidemux();
//** Video **
// Load the file
app.forceUnpack();
app.load(sourcefile);
app.rebuildIndex();
//** Postproc **
app.video.setPostProc(3,3,0);
app.video.setFps1000(25000);
//** Video Codec conf **
app.video.addFilter("coloryuv","gain=128");
app.video.addFilter("mphqdenoise3d","param1=4,000000","param2=3,000000","param3=6,000000");
app.video.addFilter("mpresize","w=720","h=576","algo=1");
app.video.addFilter("asharp","t=2,500000","d=1,000000","b=-1,000000","bf=0");
// app.video.addFilter("addblack","left=3","right=3","top=7","bottom=7");
//** Video Codec conf **
app.video.codec("XDVD","2PASS=$squeeze_size","168 05 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00 1f 00 00 00 03 00
00 00 02 00 00 00 01 00 00 00 01 00 00 00 fe ff ff ff 01 00 00 00 fb
ff ff ff cd cc 4c 3d 01 00 00 00 0a d7 23 3c 01 00 00 00 00 00 00 3f
00
00 00 3f 00 00 00 00 40 1f 00 00 01 00 00 00 0c 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 0
0 02 00 00 00 40 1f 00 00 00 00 00 00 00 00 00 3f 00 00 00 00 00 00 00
3f 00 00 00 00 01 00 00 00 e0 00 00 00 00 00 00 00 00 00 00 00 ");
//** Audio **
app.audio.reset();
app.audio.codec("lame",128,16,"00 00 00 00 01 00 00 00 02 00 00 00 00
00 00 00 ");
app.audio.normalizeMode=0;
app.audio.normalizeValue=0;
app.audio.delay=0;
app.audio.mixer("NONE");
app.setContainer("AVI");
app.audio.save(audiofile);
//** Audio **
app.audio.reset();
app.audio.codec("twolame",128,4,"01 00 00 00 ");
app.audio.normalizeMode=0;
app.audio.normalizeValue=0;
app.audio.delay=0;
app.audio.mixer("NONE");
app.setContainer("PS");
app.save(targetfile);
//End of script
SCRIPT
#------------------------------------------------------------------
Скрипт для прогона *всех* сценариев в каталоге:
#------------------------------------------------------------------
for js in *js; do
SCRIPTS="${SCRIPTS} --run ${js}"
done
avidemux --nogui --autoindex ${SCRIPTS} --quit
#------------------------------------------------------------------
--
Dmytro O. Redchuk
Подробная информация о списке рассылки community