2017-05-09 59 views
0

我正在研究如何將視頻分成四個片段。我見過很多解決方案和庫。我一直在尋找這個庫:在C中分割四個文件中的視頻#

https://github.com/AydinAdn/MediaToolkit

這是分裂的視頻

var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"}; 
var outputFile = new MediaFile {Filename = @"C:\Path\To_Save_ExtractedVideo.flv"}; 

using (var engine = new Engine()) 
{ 
    engine.GetMetadata(inputFile); 

    var options = new ConversionOptions(); 

    // This example will create a 25 second video, starting from the 
    // 30th second of the original video. 
    //// First parameter requests the starting frame to cut the media from. 
    //// Second parameter requests how long to cut the video. 
    options.CutMedia(TimeSpan.FromSeconds(30), TimeSpan.FromSeconds(25)); 

    engine.Convert(inputFile, outputFile, options); 
} 

的代碼分裂只是一個片段的代碼。有沒有辦法將它分成四部分?

親切的問候

PS:該解決方案必須是C#和已經看到了Directshow的解決方案。

+0

也許這樣做4次改變起始第二? – Pikoh

+0

你的意思是我必須做4 var選項=新的ConversionOptions(); ?我正在考慮這個問題,但這是一個很好的解決方案嗎? – Fearcoder

+0

我沒有使用過這個庫,但對我來說聽起來不錯,4'var options'和4'engine.Convert'我猜 – Pikoh

回答

0

我以前沒有使用過這個庫,但這是我如何去做的。


var inputFile = new MediaFile {Filename = @"C:\Path\To_Video.flv"}; 
var outputName = "C:\Path\To_Save_ExtractedVideo"; 
var outputExtension = ".flv"; 

double t = inputFile.Length/4; //length of parts -- need to use method to get file playtime length 

for(int i=0;i<4;i++){ 

    var engine = new Engine() 
    engine.GetMetadata(inputFile); 

    var options = new ConversionOptions(); 

    // This example will create a 25 second video, starting from the 
    // 30th second of the original video. 
    //// First parameter requests the starting frame to cut the media from. 
    //// Second parameter requests how long to cut the video. 
    options.CutMedia(TimeSpan.FromSeconds(30 + (i*int.Parse(t))), TimeSpan.FromSeconds((i+1)*int.Parse(t))); 

    engine.Convert(inputFile, $"{outputName}_{i.ToString()}{outputExtension}, options); 

    engine.Destroy(); // Need to destroy object or close inputstream. Whichever the library offers 

    } 
} 
+0

感謝您的時間!這行代碼有一個問題'double t = inputFile.Length/4;' 'MediaToolkit.Model.MediaFile'沒有包含'Length'的定義,並且沒有找到接受'MediaToolkit.Model.MediaFile'類型的第一個參數的擴展方法'Length'(你是否缺少using指令或程序集引用?) – Fearcoder

+0

同樣的故事爲engine.Destroy() – Fearcoder

+0

@Fearhunter你需要尋找類似的東西,我會評論我在找什麼。我從來沒有使用過這個庫,所以我不知道我需要怎樣稱呼對不起。 'inputFile.Length/4'將是文件長度/ 4,應該有一個方法或者類似的東西來獲得這個'engine.Destroy()'應該有一種銷燬對象或關閉的方法輸入流。那就是你應該在那裏做的 – artman41