无法在macOS应用中的FFMPEG进程中通过NSOpenPanel访问用户选择的文件

猛禽

我是通过SwiftUI开发macOS的新手。我通过选择了MP4文件后,尝试运行FFMPEG进程NSOpenPanel但是,FFMPEG回应为:

file:///Users/MyUsername/Documents/Video.mp4:无此类文件或目录

这是我的简单代码:

import SwiftUI

struct ContentView: View {

    @State var selectedURL: URL?

    var body: some View {
        VStack {
            if selectedURL != nil {
                Text("Selected: \(selectedURL!.absoluteString)")
            } else {
                Text("Nothing selected")
            }
            Button(action: {
                let panel = NSOpenPanel()
                panel.allowedFileTypes = ["mp4"]
                panel.canChooseDirectories = false
                panel.canCreateDirectories = false
                panel.allowsMultipleSelection = false
                let result = panel.runModal()
                if result == .OK {
                    self.selectedURL = panel.url

                    let savePath = self.getDownloadDirectory().appendingPathComponent("video.webm")

                    self.convertVideo(inputFilePath: self.selectedURL!.absoluteString, outputFilePath: savePath.absoluteString, callback: {(s) in
                        // omit the callback at this moment
                    })
                }
            }) {
                Text("Select File")
            }
        }
        .frame(width: 640, height: 480)
    }

    func getDownloadDirectory() -> URL {
        let paths = FileManager.default.urls(for: .downloadsDirectory, in: .userDomainMask)
        return paths[0]
    }

    func convertVideo(inputFilePath: String, outputFilePath: String,
                     callback: @escaping (Bool) -> Void) -> (Process, DispatchWorkItem)? {
        guard let launchPath = Bundle.main.path(forResource: "ffmpeg", ofType: "") else {
            return nil
        }
        let process = Process()
        let task = DispatchWorkItem {
            process.launchPath = launchPath
            process.arguments = [
                "-y",
                "-i", inputFilePath,
                "-vcodec", "vp8",
                "-acodec", "libvorbis",
                "-pix_fmt", "yuva420p",
                "-metadata:s:v:0",
                "alpha_mode=\"1\"",
                "-auto-alt-ref", "0",
                outputFilePath
            ]
            process.standardInput = FileHandle.nullDevice
            process.launch()
            process.terminationHandler = { process in
                callback(process.terminationStatus == 0)
            }
        }
        DispatchQueue.global(qos: .userInitiated).async(execute: task)

        return (process, task)
    }
}

我错过了什么让FFMPEG处理访问我选择的文件?谢谢!

他的脾气

尝试使用.path代替.absoluteString

self.convertVideo(inputFilePath: self.selectedURL!.path, 
                  outputFilePath: savePath.absoluteString, callback: {(s) in

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

macOS 商店沙盒应用程序使用 NSOpenPanel 选择下载文件夹,但无法再次访问该文件夹

沙箱下的NSOpenPanel-访问“用户选定”文件夹中的所有文件

使用选择文件和选择文件表(如在 NSOpenPanel 中)

无法通过 Django 访问子进程中的 /var/tmp

www数据用户无法访问ubuntu中dumpcap应用程序创建的文件

无法通过macOS中的ansarchive归档模块提取tar文件?

如何在android中隐藏文本文件?用户无法通过任何方式访问该文件吗?

通过Yaml规则限制对Google App Engine应用程序中的静态文件的登录用户的访问失败

在ElectronJS应用中无法在渲染器进程中访问__dirname变量

在ubuntu中挂载了Windows文件,无法通过终端访问

通过Swift访问MacOS中的键盘设置

在 Python 中删除文件时出现错误“进程无法访问文件”

通过文件中给出的进程ID递归杀死进程

无法在Flutter应用中通过用户ID提取特定的用户文档

无法在macOS Mojave应用中模拟按键

无法在MacOS应用中创建新目录

进程无法访问文件

进程无法访问文件

如何使用户无法通过Express / Electric应用中的常规浏览器查看应用

无法从Makefile中访问文件

如何从应用程序访问“我的用户”文件夹中的文件?

如何使用 Applescript 在 MacOS 中判断最前面的窗口是否是 NSOpenPanel / 文件打开对话框?

让用户在将文件保存到Web应用程序中的同时选择文件类型

NSOpenPanel 限制已选择的文件

即使在Linux终端中通过安全模式设置了密码,也无法访问MySql根用户

无法通过iOS中的图片选择器插件访问所选图片

无法访问Directus中的用户令牌

javafx 用户界面应用程序无法访问 ArrayList 中的所有值

Swift macOS 应用程序:无法在 /usr/local/bin 中运行可执行文件