
さて、このようにして大量のファイルを結合する適切な自動または半自動の方法を調べて数日が経ちました。基本的に、私が実現したいのは、他のクリップの前に同じクリップを挿入することです。
この場合、.flv、.mp4、.aviファイル(常に同じコーデックをマージ)で試しましたが、テストしても成功しませんでした。利用可能なすべてのプログラムWindows と OSx の両方で使用できます。信じてください、私はすべて試しました。この一連のタスクを非常にうまく処理できると思われるのは、Videocharge の製品だけです。ウォーターマークマスターそしてビデオチャージスタジオどれもタスクを正しく実行できませんでした。スクリプトを使ってこれを達成できる方法があったかもしれません。アフターエフェクトまたはソニーベガス、ただ見つけられなかっただけです。
今、私はシェル、UNIX スクリプトのいずれかで同じことを実現する方法を見つけようとしています... どちらでも構いません。これらのタスクのためだけに Ubuntu をマウントしたくないだけです。私はプログラマーではありませんが、かなり頑固なので (時には夜が明けないこともあります)、バッチ ビデオ処理やスクリプトに熱心で十分な能力のある方からの支援や指導をいただければ幸いです。
今のところ、私が見つけた唯一の有用な方法は、メンコードまたはffmpegコマンドを通じて実行できますが、一括でマージすることはできません。ビデオを整理する方法は気にしません。しかし、数百または数千のビデオに対して操作を実行することを考慮すると、それぞれに「一意の」イントロ クリップが付属する別々のフォルダーにすべてのビデオを保存するのは適切ではありません。最も論理的な方法は、「束」のビデオをフォルダーに保存し、イントロ クリップをエンコーダーまたはレンダラーと同じフォルダーに保存することだと思います。
ご協力やご指導をよろしくお願いいたします。
答え1
そうですね、ビデオを追加したことはありますが、最初に追加したことはありません。avidemux を使用してビデオを追加できます。
私は JavaScript が得意ではないので、スクリプトを書けないことをお許しください。Avidemux のスクリプトに関するチュートリアルがあります。Avidemux はオープンソースの無料ビデオ コンバータです。avidemux でオーディオ/ビデオにエフェクトを追加し、複数の形式で保存できます。
このスクリプトは、ここに示すページリンクのサンプルチュートリアルです: [::: リンク :::] スクリプトは orgDir ディレクトリをスキャンし、すべての AVI ファイルを解凍します。結果のファイルは destDir ディレクトリに配置されます (新しい directorySearch API を使用)。
Avidemux 関数は次のとおりです: displayError、displayInfo、fileReadSelect、fileWriteSelect、allFilesFrom、nextFile
その他の関数: load、append、save、saveDVD、saveOGM、clearSegments、addSegment、goToTime、forceUnpack、setContainer
その他のスクリプト関数はこちら:http://www.avidemux.org/admWiki/doku.php?id=using:scripting#avidemux_functions
avi ファイルを変換する Turotial スクリプトは次のとおりです。
//AD <-
/*
Simple script that scans the orgDir directory
and unpack all AVI files
The resulting file is put in destDir directory
Using new directorySearch API
*/
var app = new Avidemux();
var ds = new DirectorySearch();
var orgDir;
var destDir;
var reg =new RegExp(".$");
/*
This is for Unix
For Windows change to
sep="\\";
reg2=new RegExp("\\.*\\");
*/
var sep="\\";
var reg2 =new RegExp("\/.*\/");
var extension;
var target;
//
//
//
// select files from original & target directories
//
orgDir=fileReadSelect();
destDir=fileWriteSelect();
orgDir=pathOnly(orgDir);
destDir=pathOnly(destDir);
//
// strip last \\ or //
//
orgDir=orgDir.replace(reg,"");
destDir=destDir.replace(reg,"");
print("orgDir : <"+orgDir+">");
print("destDir : <"+destDir+">");
//
// Go
//
if(ds.Init(orgDir))
{
while(ds.NextFile())
{
// Only process file we want i.e. AVI
if(!ds.isNotFile && !ds.isDirectory && !ds.isHidden && !ds.isArchive && !ds.isSingleDot && !ds.isDoubleDot)
{
extension=ds.GetExtension();
if(extension == "avi")
{
target=ds.GetFileName();
target=destDir+sep+target;
print("***"+ds.GetFileName()+"-->"+target);
processFile(orgDir+sep+ds.GetFileName(),target);
}
//print("File: "+ds.GetFileName()+" is "+ds.GetFileSize()+" bytes, extension "+extension);
}
}
print("We just searched in directory \"" + ds.GetFileDirectory() + "\"");
ds.Close();
}
else
displayError("Error initializing the directory search");
displayInfo("Finished !");
function processFile(filename, targetfile)
{
// Load the file
app.forceUnpack();
app.load(filename);
app.rebuildIndex();
app.audio.delay=0;
app.audio.mixer("NONE");
app.audio.scanVBR();
app.setContainer("AVI_UNP");
app.save(targetfile);
return 1;
}
お役に立てれば...
出典:
答え2
@user2377276 さんのご提案に心から感謝します。本当に感謝しています。実際、あなたの回避策は私を正しい方向に導いてくれます。まだ成功していないので、そう願っています。これまでのところ、マージに最も近づいたのは、次のコードのさまざまなバリエーションを、複数の異なるビデオと同じディレクトリで実行することでした。追加する一意のファイルはルートに配置され、出力用に C:/TEMP を作成しました。
%a in ("*.flv") の場合、Mencoder -oac copy "c:\INTRO.flv" "%a" -o "c:\TEMP\%a" を実行します。
すべてのビデオは FLV1 形式ですが、解像度が若干異なるため、基本的にはひどい状態になります。
ffmpeg を試すべきかどうかわかりません。何か提案はありますか?
いくつかのプログラムをテストしましたが、いずれも再エンコードを行わず、場合によっては解像度を強制するだけなので、再エンコードせずにこれを達成できると確信しています。実際、最もうまく動作しているように思われるプログラムは AIR アプリケーションの Rich Flv でしたが、バッチでは動作しません。