Я начинаю с пустого массива:
var ffmpegFilters = [String]()
У меня есть кнопка, которая должна запускать процесс ffmpeg при нажатии на нее:
@IBAction func startConversionClicked(_ sender: Any) {
//buildFfmpegString()
ffmpegConvert(inputPath: inputFilePath, filters: ffmpegFilters, outputPath: "outputFilePath")
}
Функция с процессом выглядит такthis:
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]' в ожидаемый тип аргумента 'String'
И я не уверен, как это исправить. Очень важно правильно настроить форматирование этих аргументов ffmpeg, потому что сейчас мой проект застрял из-за того, что ffmpeg не нравятся аргументы, которые Swift передает ему в этом процессе, поэтому я пытаюсь сделать все, что связано с аргументами, в качестве маркеракак я могу.