[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