?D::MotionBros このページをアンテナに追加 RSSフィード

2010-08-26 Thu

avi から wmv にまとめて変換する JScript

| 01:46 |  avi から wmv にまとめて変換する JScript - ?D::MotionBros を含むブックマーク  avi から wmv にまとめて変換する JScript - ?D::MotionBros のブックマークコメント

PowerPoint に埋め込む動画が mp4 うまく動かないので mp4toAvi した後に wmv 化するための avi2wmv.js.bat を書きました。動かすには Windows Media Encoder が必要です。

screenshot

no title

avi2wmv.js.bat

@if (1==1) /*
@ECHO OFF
rem ========================================================
rem  MS-DOS 処理
rem ========================================================
CScript //Nologo //E:JScript "%~f0" %*
PAUSE
GOTO :EOF
rem */
@end

// =========================================================
//  JScript 処理
// =========================================================

var owsh    = WScript.CreateObject("WScript.Shell") ;
var ofs     = new ActiveXObject("Scripting.FileSystemObject") ;
var args    = WScript.Arguments ;

var wmcmd   = "C:\\Program Files\\Windows Media Components\\Encoder\\WMCmd.vbs" ;
var v_mode      = 2 ;   // 品質モード
var v_quality   = 100 ; // 品質 100(最高)

if( ! ofs.FileExists(wmcmd) ){
    WScript.Echo("Windows Media Encoder の vbs を " + wmcmd + "にインストールしてください。") ;
    WScript.Quit();
}

if( args.length === 0 ){
    WScript.Echo("Please drag & drop directory or avi file");
    WScript.Quit();
}

var avis    = new Array() ;

for( var i = 0 ; i < args.length ; i++ ){
    if( ofs.FolderExists(args(i)) ){
        findAvi(args(i)) ;
    }else{
        addAvi(args(i)) ;
    }
}

if( avis.length === 0 ){
    WScript.Quit() ;
}
convert() ;
WScript.Quit() ;

// 再帰的に avi ファイルを探す
function findAvi(dir){
    WScript.Echo("find : " + args(i));
    var osa = new ActiveXObject("Shell.Application") ;
    var of  = osa.NameSpace(dir) ;
    var ofi = of.Items() ;
    for( var i = 0 ; i < ofi.Count ; i++ ){
        var oi  = ofi.Item(i) ;
        if( oi.isFolder ){
            findAvi(oi.Path) ;
        }else{
            addAvi(oi.Path) ;
        }
    }
}

// wmv ファイルパス取得
function getWmvFilePath(path) {
    return path.replace(/\.avi$/i,".wmv") ;
}

// avi ファイルならリストに追加
function addAvi(path){
    if( path.search(/\.avi$/i) === -1 ){
        debugPrint("error : " + path);
        return false ;
    }
    if( ofs.FileExists(getWmvFilePath(path)) ){
        debugPrint("error : wmv exist. " + path ) ;
        return false ;
    }
    WScript.Echo("add  : " + path);
    avis.push(path) ;
}

// コンバート
function convert() {
    for( var i = 0 ; i < avis.length ; i++ ){
        // wmv 作成
        var wmvpath = getWmvFilePath( avis[i] ) ;
        var avi2wmvCommand  = "cscript.exe \"" + wmcmd + "\" -v_mode " + v_mode
                + " -v_quality " + v_quality + " -input \"" + avis[i] 
                + "\" -output \"" + wmvpath + "\"" ;
        owsh.Run( avi2wmvCommand, 5, 1 ) ;
    }
}

// デバッグプリント
function debugPrint(str) {
//  WScript.Echo(str) ;
}

2010-08-09 Mon

avisynth を使って mp4 から avi 変換その2

| 02:36 |  avisynth を使って mp4 から avi 変換その2 - ?D::MotionBros を含むブックマーク  avisynth を使って mp4 から avi 変換その2 - ?D::MotionBros のブックマークコメント

Xacti で撮ったHD動画をまとめて低解像度に変換するスクリプト - ?D::MotionBros から

  • 1avs に対して 1job 化
  • ffindex も temp 内に作成
  • DivXインストールして圧縮を下記に設定
    • 動画の圧縮を divx
    • 音声の圧縮を mp3

を対応した wsh に書き直してみました。

@if (1==1) /*
@ECHO OFF
rem ========================================================
rem  MS-DOS 処理
rem ========================================================
CScript //Nologo //E:JScript "%~f0" %*
PAUSE
GOTO :EOF
rem */
@end

// =========================================================
//  JScript 処理
// =========================================================

var fpsnum  = 30 ;
var width   = 512 ;

var vdexe   = "C:\\Program Files\\VirtualDubMod_1_5_10_2_All_inclusive\\VirtualDubMod.exe" ;
var owsh    = WScript.CreateObject("WScript.Shell") ;
var ofs     = new ActiveXObject("Scripting.FileSystemObject") ;
var tempdir = ofs.GetSpecialFolder(2).Path + "\\" + WScript.ScriptName + ofs.getTempName() ;
var args    = WScript.Arguments ;

if( args.length === 0 ){
    WScript.Echo("Please drag & drop directory or mp4 file");
    WScript.Quit();
}

var mp4s    = new Array() ;

for( var i = 0 ; i < args.length ; i++ ){
    if( ofs.FolderExists(args(i)) ){
        findMp4(args(i)) ;
    }else{
        addMp4(args(i)) ;
    }
}

if( mp4s.length === 0 ){
    WScript.Quit() ;
}

makeTempDir() ;
makeJobs() ;
convert() ;
cleanup() ;

// 再帰的に mp4 ファイルを探す
function findMp4(dir){
    WScript.Echo("find : " + args(i));
    var osa = new ActiveXObject("Shell.Application") ;
    var of  = osa.NameSpace(dir) ;
    var ofi = of.Items() ;
    for( var i = 0 ; i < ofi.Count ; i++ ){
        var oi  = ofi.Item(i) ;
        if( oi.isFolder ){
            findMp4(oi.Path) ;
        }else{
            addMp4(oi.Path) ;
        }
    }
}

// avi ファイルパス取得
function getAviFilePath(path) {
    return path.replace(/\.mp4$/i,".avi") ;
}

// mp4 ファイルならリストに追加
function addMp4(path){
    if( path.search(/\.mp4$/i) === -1 ){
        debugPrint("error : " + path);
        return false ;
    }
    if( ofs.FileExists(getAviFilePath(path)) ){
        debugPrint("error : avi exist. " + path ) ;
        return false ;
    }
    
    WScript.Echo("add  : " + path);
    mp4s.push(path) ;
}

// tempdir 作成
function makeTempDir() {
    if( ofs.FolderExists(tempdir) ){
        debugPrint("delete : " + tempdir) ;
        ofs.DeleteFolder(tempdir) ;
    }
    ofs.CreateFolder(tempdir) ;
}

// jobs ファイル作成
function makeJobs() {
    for( var i = 0 ; i < mp4s.length ; i++ ){
        // avs ファイル作成
        debugPrint("makeavs : " + i + ".avs : " + mp4s[i]) ;
        var avs = ofs.createTextFile(tempdir + "\\" + i + ".avs") ;
        /* 
        avs.WriteLine("FFMpegSource2\(\"" + mp4s[i] 
            + "\", fpsnum=" + fpsnum 
            + ", atrack=-1, width=" + width
            + ", height=" + height + "\)") ;
        */
        var ffindex = tempdir + "\\" + i + ".ffindex" ;
        avs.WriteLine("file =\"" + mp4s[i] + "\"") ;
        avs.WriteLine("fps = " + fpsnum ) ;
        avs.WriteLine("a = FFAudioSource(file, cachefile=\"" + ffindex + "\"\)") ;
        avs.WriteLine("v = FFVideoSource(file, cachefile=\"" + ffindex + "\", fpsnum=fps\)") ;
        avs.WriteLine("clip = AudioDubEx(v, a)") ;
        avs.WriteLine("cw = Width(clip)") ;
        avs.WriteLine("ch = Height(clip)") ;
        avs.WriteLine("check = " + width ) ;
        avs.WriteLine("nw = cw > check ? check : cw")
        avs.WriteLine("nh = cw > check ? ch * check / cw : ch") ;
        avs.WriteLine("clip = SWScale(clip,width=nw,height=nh)") ;
        avs.WriteLine("return clip") ;
        avs.Close() ;
        // jobs ファイル作成
        debugPrint("makejobs : " + i + ".jobs") ;
        var jobs = ofs.createTextFile(tempdir + "\\" + i + ".jobs") ;
        var avspath = tempdir + "\\" + i + ".avs" ;
        var avipath = getAviFilePath( mp4s[i] ) ;
        avspath = avspath.replace(/\\/g, "\\\\") ;
        avipath = avipath.replace(/\\/g, "\\\\") ;
        WScript.Echo("make : " + avipath) ;
        jobs.WriteLine("VirtualDub.Open\(\"" + avspath + "\",\"\",0\)\;") ;
        jobs.WriteLine("VirtualDub.video.SetMode\(0\)\;") ;
        jobs.WriteLine("VirtualDub.stream[0].SetMode\(1\)\;") ;
        jobs.WriteLine("VirtualDub.stream[0].SetCompression\(85,24000,2,0,7000,1,12,\"AQACAAAAqAABAHEF\"\)\;") ;
        jobs.WriteLine("VirtualDub.video.SetMode\(3\)\;") ;
        jobs.WriteLine("VirtualDub.video.SetCompression\(0x78766964,0,10000,0\)\;") ;
        jobs.WriteLine("VirtualDub.video.SetCompData\(129,\"LWJ2MSA3ODAwMDAgLXZidiA0ODU0MDAwLDMxNDU3MjgsMzE0NTcyOCAtZGlyICJDOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXHRha2VvXEFwcGxpY2F0aW9uIERhdGFcRGl2WFxEaXZYIENvZGVjIiAtYiAxIC1wcm9maWxlPTMA\"\)\;") ;
        jobs.WriteLine("VirtualDub.SaveAVI(\"" + avipath + "\"\)\;") ;
        jobs.WriteLine("VirtualDub.Close\(\)\;") ;
        jobs.Close() ;
    }
}

// コンバート
function convert() {
    for( var i = 0 ; i < mp4s.length ; i++ ){
        var command = "\"" + vdexe + "\" /c /x /s\"" + tempdir + "\\" + i + ".jobs\"" ;
        owsh.Run( command, 5, 1 ) ;
    }
}

// 掃除
function cleanup() {
    // tempdir 削除
    ofs.DeleteFolder(tempdir) ;
}

// デバッグプリント
function debugPrint(str) {
//  WScript.Echo(str) ;
}

2010-08-05 Thu

Xacti で撮ったHD動画をまとめて低解像度に変換するスクリプト

| 20:26 |  Xacti で撮ったHD動画をまとめて低解像度に変換するスクリプト - ?D::MotionBros を含むブックマーク  Xacti で撮ったHD動画をまとめて低解像度に変換するスクリプト - ?D::MotionBros のブックマークコメント

Xacti DMX-HD1010 でとったHDサイズの動画が重くて見づらいのでリサイズ処理をまとめてしたかったのですが、せっかくなのでスクリプト対応しているソフトでやってみる事にしました。

大きな要素は以下の3つ

  • Avisynth : mp4 をサイズ変更して読み込む部分で avs というスクリプト対応
  • VitualDubMod : mp4 から avi へ変換する部分でコマンドライン対応
  • Windows Script Host : ファイルをまとめて処理する部分

参照:FrontPage - AviSynth.info

前準備

Avisynth をダウンロード&インストール

screenshot

Avisynth rev. 2 download | SourceForge.net


Mpeg4/H.264 がそのままだと読み込めないので Avisynth の FFmpegSource ダウンロード

screenshot

GitHub - FFMS/ffms2: An FFmpeg based source library and Avisynth/VapourSynth plugin for easy frame accurate access

7z ファイルを解凍出来ない場合は 7-Zip をダウンロード&インストール

screenshot

Download 7-Zip from SourceForge.net

解凍した FFmpegSource を C:\Program Files\AviSynth 2.5\plugins にコピー
  • doc/
  • FFMS2.avis
  • ffms2.dll
  • ffmsindex.exe
VirtualDubMod をダウンロード&インストール

screenshot

VirtualDubMod - Browse /VirtualDubMod/VirtualDubMod 1.5.10.2 at SourceForge.net


まずは Avisynth を触ってみる

sample.avs という下記のファイルをつくってみて VirtualDubMod にドラッグ&ドロップしてみる

FFMpegSource2("C:\data\avs\SANY0001.MP4", fpsnum=30, atrack=-1, width=400, height=225)

C:\data\avs\SANY0001.MP4 というファイルを

  • フレームレート : 30fps
  • 幅 : 400px
  • 高さ : 225px

にして読み込むという感じです。


次に VirtualDubMod のコマンドラインを試してみる

VirtualDubMod.exe /c /x /s"convert.jobs"

という感じで jobs ファイルを作っておけばコマンドラインで処理できるっぽいので avs ファイルをドラッグ&ドロップした後に GUI 上で job 登録してからjobs ファイルで保存してみました。

VirtualDub.Open("C:\\data\\avs\\sample.avs","",0);
VirtualDub.video.SetMode(0);
VirtualDub.SaveAVI("C:\\data\\avs\\SANY0001.avi");
VirtualDub.Close();

必要な要素だけ切り抜くと以下の4行があればいいようです。SetMode は 0 にすると DivX 方式になったのでこれにしてみましたがもっといい方法がありそうな気がします。


あとは wsh でまとめて処理できるようにしてみる。

ディレクトリもしくはファイルをドラッグ&ドロップしたら変換された avi がまだ無いものだけまとめて変換する仕組みをつくってみました。

mp4toAvi.js.bat

@if (1==1) /*
@ECHO OFF
rem ========================================================
rem  MS-DOS 処理
rem ========================================================
CScript //Nologo //E:JScript "%~f0" %*
PAUSE
GOTO :EOF
rem */
@end

// =========================================================
//  JScript 処理
// =========================================================

var fpsnum	= 30 ;
var width	= 480 ;
var height	= 270 ;

var vdexe   = "C:\\Program Files\\VirtualDubMod_1_5_10_2_All_inclusive\\VirtualDubMod.exe" ;
var owsh	= WScript.CreateObject("WScript.Shell") ;
var ofs     = new ActiveXObject("Scripting.FileSystemObject") ;
var tempdir = ofs.GetSpecialFolder(2).Path + WScript.ScriptName ;
var args    = WScript.Arguments ;

if( args.length === 0 ){
    WScript.Echo("Please drag & drop directory or mp4 file");
    WScript.Quit();
}

var mp4s    = new Array() ;
var jobfile	= tempdir + "\\temp.jobs" ;

for( var i = 0 ; i < args.length ; i++ ){
    if( ofs.FolderExists(args(i)) ){
        findMp4(args(i)) ;
    }else{
    	addMp4(args(i)) ;
    }
}

if( mp4s.length === 0 ){
	WScript.Quit() ;
}

makeTempDir() ;
makeAvs() ;
makeJobs() ;
convert() ;
cleanup() ;

// 再帰的に mp4 ファイルを探す
function findMp4(dir){
    WScript.Echo("find : " + args(i));
    var osa	= new ActiveXObject("Shell.Application") ;
    var of	= osa.NameSpace(dir) ;
    var ofi	= of.Items() ;
    for( var i = 0 ; i < ofi.Count ; i++ ){
    	var oi	= ofi.Item(i) ;
    	if( oi.isFolder ){
    		findMp4(oi.Path) ;
    	}else{
    		addMp4(oi.Path) ;
    	}
    }
}

// avi ファイルパス取得
function getAviFilePath(path) {
	return path.replace(/\.mp4$/i,".avi") ;
}

// mp4 ファイルならリストに追加
function addMp4(path){
    if( path.search(/\.mp4$/i) === -1 ){
        debugPrint("error : " + path);
        return false ;
    }
    if( ofs.FileExists(getAviFilePath(path)) ){
    	debugPrint("error : avi exist. " + path ) ;
    	return false ;
    }
    
    WScript.Echo("add  : " + path);
    mp4s.push(path) ;
}

// tempdir 作成
function makeTempDir() {
	if( ofs.FolderExists(tempdir) ){
		debugPrint("delete : " + tempdir) ;
		ofs.DeleteFolder(tempdir) ;
	}
	ofs.CreateFolder(tempdir) ;
}

// avs ファイル作成
function makeAvs() {
	for( var i = 0 ; i < mp4s.length ; i++ ){
		debugPrint("makeavs : " + i + ".avs : " + mp4s[i]) ;
		var avs = ofs.createTextFile(tempdir + "\\" + i + ".avs") ;
		avs.WriteLine("FFMpegSource2\(\"" + mp4s[i] 
			+ "\", fpsnum=" + fpsnum 
			+ ", atrack=-1, width=" + width
			+ ", height=" + height + "\)") ;
		avs.Close() ;
	}
}

// jobs ファイル作成
function makeJobs() {
	debugPrint("makejobs : tempjobs") ;
	var jobs = ofs.createTextFile(jobfile) ;
	for( var i = 0 ; i < mp4s.length ; i++ ){
		var avspath	= tempdir + "\\" + i + ".avs" ;
		var avipath	= getAviFilePath( mp4s[i] ) ;
		avspath	= avspath.replace(/\\/g, "\\\\") ;
		avipath	= avipath.replace(/\\/g, "\\\\") ;
		WScript.Echo("make : " + avipath) ;
		jobs.WriteLine("VirtualDub.Open\(\"" + avspath + "\",\"\",0\)\;") ;
		jobs.WriteLine("VirtualDub.video.SetMode\(0\)\;") ;
		jobs.WriteLine("VirtualDub.SaveAVI(\"" + avipath + "\"\)\;") ;
		jobs.WriteLine("VirtualDub.Close\(\)\;") ;
	}
	jobs.Close() ;
}

// コンバート
function convert() {
	var command = "\"" + vdexe + "\" /c /x /s" + jobfile ;
	owsh.Run( command, 5, 1 ) ;
}

// 掃除
function cleanup() {
	// tempdir 削除
	ofs.DeleteFolder(tempdir) ;
	
	// ffindex ファイル削除
	for( var i = 0 ; i < mp4s.length ; i++ ){
		index	= mp4s[i] + ".ffindex" ;
		if( ofs.FileExists(index) ){
			debugPrint( "delete : " + index ) ;
			ofs.DeleteFile(index) ;
		}
	}
}

// デバッグプリント
function debugPrint(str) {
//	WScript.Echo(str) ;
}
Error : RSSが取得できませんでした。
最新言及ISBN/ASIN 20 件
  • ワイヤレスサラウンドヘッドセット
  • アンチャーテッド 海賊王と最後の秘宝 デラックスエディション 【早期購入特典】オリジナルPlayStation4テーマ同梱&【Amazon.co.jp限定】武器カスタムスキン「雪原用武器」が入手できるプロダクトコード付
  • BUFFALO Giga 11n/a&11n/g AOSS2対応 無線LAN親機 【Wii U動作確認済み、iPhone5・Android端末対応】 WZR-600DHP
  • FUJITSU ScanSnap S1500 FI-S1500
  • カール事務器 裁断機 ペーパーカッター A4対応 40枚裁断 DC-210N
  • 月に囚われた男 コレクターズ・エディション [DVD]
  • 月に囚(とら)われた男 [Blu-ray]
  • エスター [Blu-ray]
  • エスター [DVD]
  • ドロップ スペシャル・エディション [DVD]
  • ドロップ スタンダード・エディション [DVD]
  • アヒルと鴨のコインロッカー [DVD]
  • Sucker Punch
  • アマルフィ 女神の報酬 スタンダード・エディション [DVD]
  • アマルフィ 女神の報酬 ビギンズ・セット ブルーレイディスク (本編BD+特典DVD)2枚組 [Blu-ray]
  • ロード・トゥ・パーディション <特別編> [DVD]
  • ロード・トゥ・パーディション [Blu-ray]
  • 海がきこえる [DVD]
  • なくもんか 豪華版 <初回生産限定> [DVD]
  • なくもんか [Blu-ray]
レビューまとめはこちら
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |