Я пишу Swift Process
, который объединяет серию аудиофайлов с использованием FFMPEG и libfdk_aac
.Конкатенация работает, но когда я передаю метаданные через процесс, я получаю ошибку Unrecognized option 'metadata artist="ff"' ... Option not found
.
При отладке, если я использую точку останова и печатаю с использованием e print(args.joined(separator: " "))
, я могу получить точный выводи вставьте его в консоль, FFMPEG запустится и не выдаст ошибку.
Я предполагаю, что есть странность в том, как работает процесс Swift, но даже там я протестировал, и я в замешательстве.Я создал скрипт ruby, который взял аргументы, зациклил их и распечатал, а сценарию ничего не дано, что является неожиданным.(Вывод ниже)
Свифт Процесс
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 tester Выход
-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