C# 用C语言将视频分割成四个文件#

C# 用C语言将视频分割成四个文件#,c#,.net,video,C#,.net,Video,我正在研究如何将视频分割成四个片段。我见过很多解决方案和库。我在看这个图书馆: 这是分割视频的代码 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.

我正在研究如何将视频分割成四个片段。我见过很多解决方案和库。我在看这个图书馆:

这是分割视频的代码

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解决方案

我以前没有使用过这个库,但我会这样做


var inputFile=new MediaFile{Filename=@“C:\Path\To_Video.flv”};
var outputName=“C:\Path\To\u Save\u ExtractedVideo”;
var outputExtension=“.flv”;
双t=inputFile.Length/4//部件长度——需要使用方法获取文件播放时间长度

对于(int i=0;i这对我来说效果很好,但我会修正算法,因为我错过了下面的最后一个视频,我现在的代码是:

  static void Main(string[] args)
    {
        using (var engine = new Engine())
        {
            string file = @"C:\Users\wilso\Downloads\IZA - Meu Talismã.mp4";
            var inputFile = new MediaFile { Filename = file };
            engine.GetMetadata(inputFile);
            var outputName = @"C:\Users\wilso\Downloads\output";
            var outputExtension = ".mp4";
            double Duration = inputFile.Metadata.Duration.TotalSeconds;
            double currentPosition = 0;
            int contador = 0;
            while (currentPosition < Duration)
            {
                currentPosition = contador * 30;
                contador++;

                var options = new ConversionOptions();
                var outputFile = new MediaFile(outputName + contador.ToString("00") + outputExtension);

                options.CutMedia(TimeSpan.FromSeconds(currentPosition), TimeSpan.FromSeconds(30));

                engine.Convert(inputFile, outputFile, options);


            }
        }
    }
static void Main(字符串[]args)
{
使用(变量引擎=新引擎())
{
字符串文件=@“C:\Users\wilso\Downloads\IZA-Meu Talismã.mp4”;
var inputFile=new MediaFile{Filename=file};
engine.GetMetadata(inputFile);
var outputName=@“C:\Users\wilso\Downloads\output”;
var outputExtension=“.mp4”;
double Duration=inputFile.Metadata.Duration.TotalSeconds;
双电流位置=0;
int contador=0;
while(当前位置<持续时间)
{
currentPosition=contador*30;
contador++;
var options=新的转换选项();
var outputFile=新媒体文件(outputName+contador.ToString(“00”)+outputExtension);
选项.CutMedia(TimeSpan.FromSeconds(当前位置)、TimeSpan.FromSeconds(30));
转换(输入文件、输出文件、选项);
}
}
}

也许这样做4次改变开始秒数?你的意思是我必须做4个var选项=新的转换选项()?我在考虑这个问题,但这是一个好的解决方案吗?我没有使用这个库,但听起来不错,4
var选项和4
engine.Convert
我猜好了,谢谢!谢谢您的时间!这行代码“double t=inputFile.Length/4”有问题;“'MediaToolkit.Model.MediaFile'不包含定义找不到“Length”的扩展名,也找不到接受类型为“MediaToolkit.Model.MediaFile”的第一个参数的扩展名方法“Length”(是否缺少using指令或程序集引用?)@Fearhunter您需要查找类似的内容,我将对我正在查找的内容进行注释。我从未使用过该库,因此我不知道确切需要称为什么抱歉。
inputFile.Length/4
将是文件的长度/4,应该有一个方法或类似的内容来获取此
引擎.Destroy()
应该有办法销毁对象或关闭inputstream。这是您应该做的there@Chud37dispose通常是对一个对象进行垃圾收集,iirc是从基本
对象继承的一个函数,我认为您在那里做的是保持内存中的流保持打开,但销毁和垃圾收集正在删除这些流的访问器。这可能会产生处理流的副作用,因为C#应该足够聪明,可以垃圾收集不再使用的资源。欢迎这样做!如果最后一个视频丢失了。它是否有效?当您发布答案时,请对其稍加评论。在您的情况下,如果您建议的解决方案有一个pr问题,提到哪里,甚至提出问题。
  static void Main(string[] args)
    {
        using (var engine = new Engine())
        {
            string file = @"C:\Users\wilso\Downloads\IZA - Meu Talismã.mp4";
            var inputFile = new MediaFile { Filename = file };
            engine.GetMetadata(inputFile);
            var outputName = @"C:\Users\wilso\Downloads\output";
            var outputExtension = ".mp4";
            double Duration = inputFile.Metadata.Duration.TotalSeconds;
            double currentPosition = 0;
            int contador = 0;
            while (currentPosition < Duration)
            {
                currentPosition = contador * 30;
                contador++;

                var options = new ConversionOptions();
                var outputFile = new MediaFile(outputName + contador.ToString("00") + outputExtension);

                options.CutMedia(TimeSpan.FromSeconds(currentPosition), TimeSpan.FromSeconds(30));

                engine.Convert(inputFile, outputFile, options);


            }
        }
    }