根据我选择的参数,“拆分参数列表时出错:未找到选项”或“必须指定至少一个输出文件”

根据我选择的参数,“拆分参数列表时出错:未找到选项”或“必须指定至少一个输出文件”

我在尝试使用在 XCode/Swift 中创建的用于转换有声读物的接口向 ffmpeg 传递参数时遇到了错误。

ffmpeg 应该接收的是:

inputPath = /Volumes/CSW External/ffmpeg/book.aac outputPath = /Volumes/CSW External/ffmpeg/book.m4b filters = ffmpegFilters // 见下文

我已经向控制台执行了“打印”命令,以确保这些是实际传递给 Xcode 的文件路径。我还通过应用程序本身显示的这些文件路径进行了视觉确认。

我的应用程序中可以选择五个参数数组:

                outputExtension = ".mp3"
                ffmpegFilters = ["-c:a libmp3lame", "-ac 1", "-ar 22050", "-q:a 9"]
            case 2 :
                outputExtension = ".mp3"
                ffmpegFilters = ["-c:a libmp3lame", "-ac 2", "-ar 44100", "-q:a 5"]
            case 3 :
                outputExtension = ".mp3"
                ffmpegFilters = ["-c:a libmp3lame", "-ac 1", "-ar 22050", "-b:a 32k"]
            case 4:
                outputExtension = ".flac"
                ffmpegFilters = ["-c:a flac"]
            default :
                outputExtension = ".m4b"
                ffmpegFilters = ["-c copy"]

ffmpegFilters 数组作为字符串传递到 convertTask.arguments 数组中,因此它可以很短,"-c copy"也可以很长"-c:a libmp3lame -ac 1 -ar 22050 -b:a 32k"

如果我选择最后一个(.m4b),我会收到错误:

Unrecognized option 'c copy'.
Error splitting the argument list: Option not found

我尝试使用"--c copy"(因为 - 是 Swift 中的数学运算符)并得到相同的错误,只是它读取的是“-c copy”而不是“c copy”。

对于 .mp3 和 .flac 选项,它将从我的输入文件中读取我的元数据,告诉我它至少正确读取了我的输入位置,但随后它会给我错误,At least one output file must be specified告诉我它没有正确读取我的 outputFilePath。

我尝试了各种格式化参数的方法(一个长字符串而不是一个数组,多个短字符串而不是一个数组,用两个连字符而不是一个连字符引导它们,在连字符前放置一个空格,在输出路径前面放置一个空格),结果是我偶尔会看到错误"Trailing options were found on the commandline""Unable to find a suitable output format for ' -c:a libmp3lame -ac 1 -ar 22050 -q:a 9'"

我花了三天时间研究这些不同的错误。最后一种错误似乎最常发生在人们的论点格式不正确的时候。有人能发现我的论点哪里错了吗?

编辑:我怀疑除了参数中的空格(而不是在空格所在的位置分隔它们)之外,问题还在于将参数数组传递到运行 ffmpeg 的进程的方式。为了解决这个问题,我走了一条不同的路线。它还没有起作用,但至少错误是不同的。

相关内容