Topic: Transcode directory for iPod
I wrote a little script to transcode a directory of videos for my friend's iPod and thought it might be of use to others. It mixes audio, resizes video and adds black bars only when required.
Just change the srcDir and dstDir to your liking and execute:
avidemux2_gtk --nogui --run "iPod.js" --quit
//AD
var app = new Avidemux();
var dirSearch = new DirectorySearch();
var srcDir = "C:/Videos/ToDo"; // pathOnly(fileReadSelect());
var dstDir = "C:/Videos/iPod"; // pathOnly(fileWriteSelect());
if (dirSearch.Init(srcDir))
{
while (dirSearch.NextFile())
{
if (!dirSearch.isNotFile && !dirSearch.isSingleDot && !dirSearch.isDoubleDot)
{
app.forceUnpack();
app.load(srcDir + "/" + dirSearch.GetFileName());
app.audio.scanVBR();
app.rebuildIndex();
// Resizing
var targetX = 320;
var targetY = 240;
var rX = app.video.getWidth() / targetX;
var rY = app.video.getHeight() / targetY;
var newX;
var newY;
if (rX > rY)
{
// resize by X
newX = targetX;
newY = Math.round(app.video.getHeight() / rX);
}
else
{
// resize by Y
newY = targetY;
newX = Math.round(app.video.getWidth() / rY);
}
// resize to multiple of 4
newX -= newX % 4;
newY -= newY % 4;
if (newX != app.video.getWidth() || newY != app.video.getHeight())
app.video.addFilter("mpresize", "w=" + newX, "h=" + newY, "algo=0");
// Black bars
var barX = targetX - newX;
var barY = targetY - newY;
if (barX || barY)
app.video.addFilter("addblack", "left=" + (barX >> 1), "right=" + (barX >> 1), "top=" + (barY >> 1), "bottom=" + (barY >> 1));
//** Video Codec conf **
app.video.codec("XVID4","CBR=400","500 06 00 00 00 01 00 00 00 fa 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 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 00 01 00 00 00 00 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 1f 00 00 00 1f 00 00 00 1f 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 96 00 00 00 64 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 01 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 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 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 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 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 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 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 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 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 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 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 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 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ");
//** Audio **
app.audio.reset();
app.audio.codec("aac",128,4,"80 00 00 00 ");
app.audio.normalizeMode=0;
app.audio.normalizeValue=0;
app.audio.delay=0;
if (app.audio.getNbChannels(0) != 2)
app.audio.mixer("STEREO");
app.setContainer("MP4");
// Clip off source extension and save to destination with mp4 extension
var srcFile = dirSearch.GetFileName();
app.save(dstDir + "/" + srcFile.substring(0, srcFile.length - dirSearch.GetExtension().length) + "mp4");
}
}
}