Xamarin Mac FFmpeg启动路径不可访问

oyt4ldly  于 2022-12-20  发布在  Mac
关注(0)|答案(1)|浏览(132)

我有一个支持Mac的Xamarin Forms项目,我正在尝试实现FFmpeg,所以我从它的官方页面下载了静态构建,并将其添加到Mac项目的resources文件夹中,构建操作在Content中,然后我创建了一个服务,基本上会从视频中删除音频,我用FFmpeg命令在路径中指示,我根据以下答案提供服务,并将其改编为C#:https://stackoverflow.com/a/37422688/8496520
问题是,当我尝试执行命令时,我得到以下错误:

"NSInvalidArgumentException: launch path not accessible"

我不知道为什么会发生这种情况,我在服务中使用了以下代码(调用NSTask的Launch()方法时发生错误):

public void ExecuteFFmpeg()
{
    try
    {
        var launchPath = NSBundle.MainBundle.PathForResource("ffmpeg", ofType: "");
        var compressTask = new NSTask();
        compressTask.LaunchPath = launchPath;
        compressTask.Arguments = new string[] {
            "-i",
            "downloads/test.mp4",
            "-c",
            "copy",
            "-an",
            "nosound.mp4" };
        compressTask.StandardInput = NSFileHandle.FromNullDevice();
        compressTask.Launch();
        compressTask.WaitUntilExit();
    }
    catch (Exception ex)
    {

    }

我还将项目上传到了GitHub,以防有人需要完整地查阅仓库:https://github.com/nacompllo/FFmpegSample

gmxoilav

gmxoilav1#

如果未绑定到NSTask,则可以使用CliWrapper

public static async ValueTask FfmpegRemoveAudio(string ffmpegPath, string inputFilePath, string outputFilePath)
{
    await Cli.Wrap(ffmpegPath).WithArguments(new[] { "-i", inputFilePath, "-c", "copy", "-an", outputFilePath }).ExecuteAsync();
}

除了CliWrapper之外,我还测试了FfmpegCoreFFmpget.NET,它们也抛出了一些类似的异常,就像你描述的那样。我没有胶水,为什么它们的行为不同。详细信息请参见完整的工作POC。

相关问题