如何使用MeidaToolkit.NetCore转换Asp Core 2中的视频

时间:2018-05-12 17:19:27

标签: ffmpeg asp.net-core-2.0 mp4 video-conversion

我正在使用MediaToolkit.NetCore,它处于早期阶段,以便将视频转换为mp4格式,但我无法让它在ASP Core 2上运行。

使用MeidaToolkit.NetCore我尝试了这个:

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

var outputFile = new MediaFile {Filename = 
@"C:\Path\To_Save_New_Video.mp4"};

using (var engine = new Engine())

{ engine.Convert(inputFile, outputFile);}

但问题是ffmpeg.exe没有嵌入库二进制文件中,所以我在新的Engine()上遇到错误。为了解决这个问题,你必须在构造函数中明确地传递一个ffmpeg.exe路径,我不知道该怎么做。

如何在上面的构造函数中传递ffmpeg.exe?

2 个答案:

答案 0 :(得分:1)

下载我从https://ffmpeg.zeranoe.com/builds/下载的ffmpeg的构建文件。然后,我在根目录“ ffmpeg / windows”和“ ffmpeg / unix”中创建了一个文件夹。在Windows文件夹中,我为“ ffmpeg.exe”,“ ffprob.exe”和“ ffplay.exe”添加了exe文件。另外,我在unix目录中添加了mac os构建。

在Startup.cs的ConfigureService方法中,我按如下所示注册了服务;

string ffmpegFilePath = null;
var osEnvironment = Environment.OSVersion;
if(osEnvironment.Platform == PlatformID.Win32NT)
{
    ffmpegFilePath = Path.Combine(Environment.CurrentDirectory, "ffmpeg", "windows", "ffmpeg.exe");
}
else
{
    ffmpegFilePath = Path.Combine(Environment.CurrentDirectory, "ffmpeg", 
    "unix", "ffmpeg");
}
if (!string.IsNullOrEmpty(ffmpegFilePath))
{
    services.AddMediaToolkit(ffmpegFilePath);
}

在作者AydinAdn/MediaToolkit如何实现FfMpegTaskBase之后,我创建了一个FfTaskConvertVideo类,传入了用于将视频从接收器转换为构造器中的源的参数。

public class FfTaskConvertVideo: FfMpegTaskBase<int>
{
    private readonly string _inputFilePath;
    private readonly string _outputFilePath;


    /// <param name="inputFilePath">Full path to the input video file.</param>
    /// <param name="outputFilePath">Full path to the output video file.</param>
    public FfTaskGetVideoPortion(string inputFilePath, string outputFilePath)
    {
        this._inputFilePath = inputFilePath;
        this._outputFilePath = outputFilePath;
    }
    /// <summary>
    /// FfTaskBase.
    /// </summary>
    public override IList<string> CreateArguments()
    {
        var arguments = new[]
        {
        "-i",
        $@"{this._inputFilePath}",
        $@"{this._outputFilePath}"
        };

        return arguments;
    }

    /// <summary>
    /// FfTaskBase.
    /// </summary>
    public override async Task<int> ExecuteCommandAsync(IFfProcess ffProcess)
    {
        await ffProcess.Task;
        return 0;
    }
}

//Then we use this way
var convertTask = new FfTaskConvertVideo("input.mp4", "output.ogg");
//using the injected IMediaToolkitService as _media
await _media.ExecuteAsync(convertTask);

参考: https://opensource.com/article/17/6/ffmpeg-convert-media-file-formats-用它来了解用于转换的参数

答案 1 :(得分:0)

您可以将其传递给Engine类的构造函数:

using (var engine = new Engine(@"D:\MediaToolkit\ffmpeg.exe"))