PCに関する雑多な記録

PCに関する諸々の備忘録に変身。

mpeg2TSをGOP単位で編集する方法

2008年10月14日 | FedoraCore4
必要な物
VLC
Avidemux
MediaInfo

方法
1. VLCを使って、tsをpsに変換する(JavaScriptあたりで、スクリプトを書くと便利)
2. MediaInfoを使って、音と映像のずれをチェック
3. Avidemuxで、編集。このとき、2で調べたずれを設定する
4. Avidemuxで保存。フォーマットはMPEG2PSとし、映像、音声共に「コピー」を選んでおく。

これで、訪れのないGOP単位での編集が可能。GOP単位での編集なので、映像の再エンコードのないファイルが作成可能。

VLCを使って変換するスクリプト
これは、元のファイルの拡張子.tsを.mpgに変更して保存します。
上書き確認とか、全くしていないので、注意。また、最後のechoは、複数のファイルをドロップした時に、複数のプロセスで処理をしないようにする為のおまじない(うまく処理する方法がわかりませんでした..)
-- from here --
// 環境設定パラメータ
var vlcpath = "D:\\win32app\\vlc-0.8.6f\\vlc.exe"
var acodec="mp2a";
var abrate="192";
var achannel="2";
var savefolder="i:\\CAP_TMP";

var objArgs = WScript.Arguments;
var objShell = WScript.CreateObject("WScript.Shell");
var fso;

function makevlcparam(srcname, acodec, abrate, achannel, dstname) {
var vlcconvtempl = " \"%srcname%\" :sout=#transcode{acodec=%acodec%,ab=%abrate%,channels=%achannel%}:duplicate{dst=std{access=file,mux=ps,dst=\"%dstname%\"}} vlc:quit";
vlcconvtempl = vlcconvtempl.replace(/%srcname%/, srcname);
vlcconvtempl = vlcconvtempl.replace(/%acodec%/, acodec);
vlcconvtempl = vlcconvtempl.replace(/%abrate%/, abrate);
vlcconvtempl = vlcconvtempl.replace(/%achannel%/, achannel);
vlcconvtempl = vlcconvtempl.replace(/%dstname%/, dstname);
return vlcconvtempl;
}

fso = new ActiveXObject("Scripting.FileSystemObject");
for (i = 0 ; i <objArgs.length ; i++) { var dstname = srcname.replace(/\.ts$/, ".mpg");
// var dstfname = fso.GetFileName(dstname);
// dstname = savefolder + "\\" + dstfname;
var vlcparam = makevlcparam(srcname, acodec, abrate, achannel, dstname);
objShell.run(vlcpath + vlcparam, 7, true);
objShell.run("cmd /c echo test.", 7, true);
}
-- end --