Swift进程无法正确将元数据Args发送到FFMPEG

时间:2019-04-30 10:06:09

标签: swift ffmpeg nstask

我正在写一个Swift Process,它使用FFMPEG和libfdk_aac连接一系列音频文件。串联可以工作,但是当我通过该过程传递元数据信息时,会出现Unrecognized option 'metadata artist="ff"' ... Option not found错误。

在调试时,如果我使用断点并使用e print(args.joined(separator: " "))进行打印,则可以获取准确的输出并将其粘贴到控制台中,FFMPEG会运行并且不会引发错误。

我假设Swift流程的工作方式有些奇怪,但是即使经过测试,我也感到很困惑。我创建了一个ruby脚本,该脚本将args循环并遍历并打印出来,并且没有给脚本带来任何意外。 (下面的输出)

快速过程

private func export() {
        guard let ffmpegPath = Bundle.main.path(forResource: "ffmpeg", ofType: "") else { return }


        var task = Process()
        task.launchPath = ffmpegPath

        let args: [String] = [
            "-i",
            #"concat:"\#(fileContents)""#,
            title(),
            artist(),
            narrator(),
            "-c:a",
            "libfdk_aac",
            "-vn",
            #"\#(exportPath)\#(exportFilename)"#
        ].compactMap { $0 }

        task.arguments = args

        var pipe = Pipe()
        setStdErrPipe(pipe: &pipe, task: &task)
        setTerminationNotification(task: task)

        task.launch()
    }

    func title() -> String? {
        guard metadata.titleText != "" else {
            return nil
        }
        return #"-metadata title="\#(metadata.titleText)""#
    }

    func artist() -> String? {
        guard metadata.authorText != "" else { return nil }
        return #"-metadata artist="\#(metadata.authorText)""#
    }

    func narrator() -> String? {
        guard metadata.narratorText != "" else { return nil }
        return #"-metadata album_artist="\#(metadata.narratorText)""#
    }

Arg测试器输出

-i
concat:"/Users/sharkmaul/Downloads/Bringing Up BÈbÈ/Bringing Up BÈbÈ-Part01.mp3|/Users/sharkmaul/Downloads/Bringing Up BÈbÈ/Bringing Up BÈbÈ-Part02.mp3"
-metadata title="title"
-metadata artist="author"
-metadata album_artist="narrator"
-c:a
libfdk_aac
-vn
/Users/sharkmaul/Desktop/068F4F43-89EE-47F6-838D-7AD3E02E7F8A.m4a

0 个答案:

没有答案