我正在使用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?
答案 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"))