Я хочу вызвать ffmpeg, чтобы получить продолжительность видеофайла. При использовании команды в терминале OSX все работает нормально:
ffmpeg -i MyVideo.MOV 2>&1 | grep "Duration"
Я получаю это:
Duration: 00:01:23.53, start: 0.000000, bitrate: 39822 kb/s
Это идеально для меня. Но теперь я попробовал этот вызов из своего кода:
func shell(launchPath: String, arguments: [String]) -> String
{
let task = Process()
task.launchPath = launchPath
task.arguments = arguments
let pipe = Pipe()
task.standardOutput = pipe
do {
try task.run()
// task.launch() till 10.12, but now catchable!
} catch let error as NSError {
print(error.localizedDescription)
return ""
}
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
return output
}
Этот код отлично работает для всех других внешних команд. Но здесь я получаю ошибку:
[NULL @ 0x107808800] Unable to find a suitable output format for '2>&1'
2>&1: Invalid argument
Я определил аргументы для ffmpeg следующим образом:
let arguments = ["-i", video.path, "2>&1", "|", "grep \"Duration\"" ]
Даже если я помещу их все в один аргумент в виде большей строки, это не сработает. Использование pipe:1 вместо 2›&1 и остальных аргументов также приводит к ошибке.
Есть идеи, как мне заставить его работать?
.whitespacesAndNewlines
Я имел в виду.newlines
* 12.08.2020