
好吧,已經花了幾天時間研究一種合適的自動或半自動方式來批量合併文件。基本上,我想要實現的是在一堆其他剪輯之前插入相同的剪輯。
在這種情況下,我一直在嘗試使用 .flv、.mp4、.avi 檔案(總是合併相同的編解碼器),但測試後沒有成功所有可用的程序在 Windows 和 OSx 中。相信我,我已經嘗試過所有這些。唯一可以很好地處理這類任務的是 Videocharge:水印大師和影片收費工作室。他們都無法正確執行任務。也許有某種方法我可以透過編寫腳本來實現這一目標後遺症或者索尼維加斯,我只是沒有找到。
現在我試著找一些方法來透過 shell、unix 腳本來實現相同的事情......我不在乎。我只是不想只為了這些任務而安裝 Ubuntu。我不是程式設計師,但我很固執(這有時會讓我度過永無止境的夜晚),因此我希望任何熱衷於批量視訊處理或腳本編寫的人提供幫助或指導。
現在,我發現的唯一有用的路徑驅使我使用門碼或者ffmpeg通過命令,但我無法批量執行合併。我不關心如何整理影片。但考慮到該操作將對數百或數千個影片執行,因此不適合將它們全部放在單獨的資料夾中,每個資料夾都附有「獨特的」介紹剪輯。我想最合乎邏輯的方法是將「一堆」影片儲存在一個資料夾中,並將介紹剪輯儲存在與編碼器或渲染器相同的資料夾中。
預先感謝您的任何幫助或指導,
答案1
嗯,我已經附加了視頻,但從未在開始時附加。您可以使用 avidemux 附加影片!
我不擅長 JavaScript,所以請原諒我沒有為你寫這個腳本。有一個 Avidemux 腳本編寫教程。 Avidemux 是一個開源且免費的視訊轉換器。您可以在 avidemux 中為音訊/視訊添加效果並將其儲存為多種格式。
該腳本是此處給出的頁面連結的範例教學:[::: 關聯 :::] 並且腳本將簡單地掃描 orgDir 目錄並解壓縮所有 AVI 檔案。產生的檔案放置在 destDir 目錄中(使用新的 DirectorySearch API)。
avidemux函數如下:displayError、displayInfo、fileReadSelect、fileWriteSelect、allFilesFrom、nextFile
以及更多功能:載入、追加、儲存、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。
對於 ("*.flv") 中的 %a 執行 Mencoder -oac copy "c:\INTRO.flv" "%a" -o "c:\TEMP\%a"
所有影片都是 FLV1 格式,但它們的解析度確實略有不同,所以我基本上是在胡說八道。
我不知道是否應該嘗試使用 ffmpeg。建議?
我非常確定這可以在不需要重新編碼的情況下實現,因為我測試了幾個程序,但它們都沒有重新編碼,它們只是在某些情況下強制解析。事實上,表現最好的程式是 AIR 應用程式 Rich Flv,但它無法大量運行。