我从一个空数组开始:
var ffmpegFilters = [String]()
我有一个按钮,单击该按钮后应启动ffmpeg进程:
@IBAction func startConversionClicked(_ sender: Any) {
//buildFfmpegString()
ffmpegConvert(inputPath: inputFilePath, filters: ffmpegFilters, outputPath: "outputFilePath")
}
该过程的功能如下:
func ffmpegConvert(inputPath: String, filters: String, outputPath: String) {
guard let launchPath = Bundle.main.path(forResource: "ffmpeg", ofType: "") else { return }
do {
let convertTask: Process = Process()
convertTask.launchPath = launchPath
convertTask.arguments = [
"-i", inputPath,
filters,
outputPath
]
convertTask.standardInput = FileHandle.nullDevice
convertTask.launch()
convertTask.waitUntilExit()
}
}
ffmpegFilters
变量数组是在另一个函数中定义的:
func conversionSelection() {
if inputFileUrl != nil {
let conversionChoice = conversionOptionsPopup.indexOfSelectedItem
switch conversionChoice {
case 1 :
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"]
}
}
}
因此,我的字符串数组被用作另一个字符串数组中的项。 当我这样做时,位于顶部的@IBAction给我一个错误:
无法将类型“ [String]”的值转换为预期的参数类型 “字符串”
我不确定如何解决该问题。正确设置这些ffmpeg参数的格式非常重要,因为现在由于ffmpeg不喜欢Swift在此过程中传递给它的参数,我的项目被卡住了,所以我试图将与参数有关的所有内容都当作项目符号尽我所能。
答案 0 :(得分:0)
以下方法声明中的参数filters
的类型为String
func ffmpegConvert(inputPath: String, filters: String, outputPath: String)
但是在IBAction方法startConversionClicked
中,您传递的是array
(String
)的[String]
而不是错误的String
。
只是使编译器静音,请在startConversionClicked
内尝试此操作,
ffmpegConvert(inputPath: inputFilePath, filters: ffmpegFilters.joined(), outputPath: "outputFilePath")
此处ffmpegFilters.joined()
将返回String
,与方法参数filters
期望的类型相同。